如何将本地 conda 环境中的 python 脚本转换为 Linux 中的 systemd 服务?

How to convert a python script in a local conda env into systemd service in Linux?

我的 conda 环境中有一个守护进程 Python 脚本,我 运行 它:

source activate my_env
python my_server.py 

我想将其转换为 systemd 服务,所以我创建了 my_server.service 文件:

[Service]
User=myuser
Group=myuser
Type=simple
ExecStart=/home/myuser/.conda/envs/my_env/bin/python /path/to/my_server.py

这不起作用,因为 systemd 正在 运行 作为 root 用户,我无法激活 conda 环境以获得正确的所有路径。 当可执行文件需要特定的 conda env 到 运行 时,创建 systemd 服务的正确方法是什么?

您可以 运行 用户级别的 systemd 服务而不是 运行 系统级别的 ning,这将 运行 它作为 root 用户。您没有将 .service 文件放在 /etc/systemd/system 目录中,而是将文件放在 ~/.config/systemd/user/ 目录中,不需要 UserGroup 派生。例如:

[Unit]
Description=Description
After=network.target

[Service]
Type=simple
WorkingDirectory=/path/to/
ExecStart=/home/myuser/.conda/envs/my_env/bin/python my_server.py

[Install]
WantedBy=default.target

您可以使用 systemctl --user start/restart/stop servicename 命令以 运行ning 用户权限启动此服务,而不是使用特权权限启动此服务。无需 sudo 权限或密码。