Systemd:在启动时运行Python脚本|virtualenv

Systemd:在启动时运行Python脚本|virtualenv
我有一个 python脚本,我通常使用此命令运行它:
(environment) python run.py

我想在开始时运行这个脚本. (我正在使用ubuntu)这是我的服务:

[Unit]Description=My Script ServiceAfter=multi-user.target[Service]Type=idleExecStart=/home/user/anaconda3/bin/python /home/user/space/run.py[Install]WantedBy=multi-user.target

顺便说一下,我无法运行这个脚本,但我可以运行任何不在环境中的脚本.如何在启动时运行python脚本(virtualenv)?

sudo systemctl status user_sent● user_sent.service - Mail ServiceLoaded: loaded (/lib/systemd/system/user_sent.service; enabled; vendor preset: enabled)Active: failed (Result: exit-code) since xxxxx 16:30:20 MSK; 3s agoProcess: 3713 ExecStart=/usr/bin/python run.py (code=exited,   status=200/CHDIR)Main PID: 3713 (code=exited, status=200/CHDIR)

您的单位文件是正确的.如果你想在venv下运行任何python文件,你只需要像在/ home / user / anaconda3 / bin / python中那样引用venv目录中的python二进制文件
[Unit]Description=My Script ServiceAfter=multi-user.target[Service]Type=idleExecStart=/home/user/anaconda3/bin/python /home/user/space/run.py[Install]WantedBy=multi-user.target

突出的是你的单位失败的原因:代码=退出,状态= 200 / CHDIR.这很可能表示您的脚本中存在问题.

如果要调试它,您将执行以下操作:

>运行您添加到ExecStart的命令=与root下的命令完全相同,以查看问题是否由您的脚本引起.
>如果运行没有错误,请使用journalctl -u< unit_name>查看日记.这应该可以为您提供有关您单位问题的更多信息.

后圣经

以下两个[服务]选项都有效:

ExecStart=/home/user/anaconda3/bin/python /home/user/space/run.py

要么

WorkingDirectory=/home/user/spaceExecStart=/home/user/anaconda3/bin/python run.py

唯一的区别是脚本中的相对调用从不同的目录运行.因此,如果您的脚本包含一行打开(“my_file”,“w”),则在第一个示例中,它将创建文件/ my_file,第二个文件/ home / user / space / my_file.

推荐阅读