python - 使用 sudo 权限在 setuptools 中发布安装脚本
问题描述
我正在尝试构建一个setup.py
文件以将 python 脚本安装为服务。到目前为止,我可以安装脚本并在 systemd 中手动添加一个单元并启用/启动该服务,但我想自动执行此操作。我遇到的问题是构建单元文件的 bash 脚本需要 sudo 权限,我不想pip install
使用sudo
.
import os
import subprocess
from setuptools import setup, Extension
import setuptools.command.install
from distutils.command.build import build as build_orig
class install(setuptools.command.install.install):
def run(self):
setuptools.command.install.install.run(self)
current_dir_path = os.path.dirname(os.path.realpath(__file__))
create_service_script_path = os.path.join(current_dir_path, 'bin', 'create_service.sh')
subprocess.check_output([create_service_script_path])
setup(name='dspt',
version=dspt.__version__,
packages=['dspt'],
include_package_data=True,
package_data={"": ["data/template.xml"]},
ext_modules=[ext],
install_requires=['slackclient==1.3.1',
'numpy',
'numba',
'scipy',
'pytz',
'requests',
'pyjwt',
'pysmb',
'boto3'],
cmdclass={
'install': install
},
entry_points={'console_scripts': ['run_dspt = dspt.batch_processing:main']}
)
创建服务.sh
#!/bin/bash
SYSTEMD_SCRIPT_DIR=$( cd $(dirname "${BASH_SOURCE:=$0}") && pwd)
cp -f "$SYSTEMD_SCRIPT_DIR/dspt.service" /etc/systemd/system
chown root:root /etc/systemd/system/dspt.service
systemctl daemon-reload
systemctl enable dspt.service
单位文件
[Unit]
Description=My super service
After=multi-user.target network.target
[Service]
User=myuser
Group=mygroup
EnvironmentFile=/etc/environment
Type=idle
Restart=always
RestartSec=3
ExecStart=/home/myuser/miniconda3/envs/dspt/bin/run_dspt
[Install]
WantedBy=multi-user.target
请注意,目前,单元文件假定该软件包安装在名为dspt
.
bash 脚本create_service.sh
显然需要 sudo 权限,我不知道该怎么做。
解决方案
推荐阅读
- azure-devops - 在管道中使用 AzureCLI 任务时出错
- vue.js - 打开多个标签时 Nuxt 浏览器崩溃
- html - 有没有一种方法可以确保 100% 忠实地再现 CSS 或 SVG 中的边框图像?
- python - DAG 不会从控制台触发
- typo3 - 带有 cs_seo 的主页中的规范错误
- python - 根据 Pandas 中其他列中的值检查列是否填充
- html - 自定义有效性输入框html
- .net-core - 如何在托管服务上实施 .NET Core 健康检查?
- flutter - 当有背景图像时,有没有办法阻止我的圆形头像在 x 轴上缩放
- javascript - 如何使用 Javascript 在函数中访问全局变量?