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

mot*_*m79 6 python systemd conda

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

source activate my_env
python my_server.py 
Run Code Online (Sandbox Code Playgroud)

我想将它转换为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
Run Code Online (Sandbox Code Playgroud)

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

小智 10

您可以在用户级别运行 systemd 服务,而不是在系统级别运行,后者将以 root 用户身份运行它。而是把。服务文件放在/ etc / systemd / system目录下,你已经把里面的文件〜/的.config / systemd /用户/目录,并没有必要的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
Run Code Online (Sandbox Code Playgroud)

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

  • 看起来这个解决方案实际上不会激活 conda 环境——如果“my_server.py”依赖于带有激活脚本的 conda 包,这将会出现问题。 (2认同)