Systemd:启动时运行 Python 脚本(virtualenv)

Systemd:启动时运行 Python 脚本(virtualenv)

我有一个 python 脚本,通常使用以下命令运行它:

(environment) python run.py

我想在启动时运行此脚本。(我正在使用 ubuntu)这是我的服务:

[Unit]
Description=My Script Service
After=multi-user.target

[Service]
Type=idle

ExecStart=/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 Service
Loaded: loaded (/lib/systemd/system/user_sent.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since xxxxx 16:30:20 MSK; 3s ago
Process: 3713 ExecStart=/usr/bin/python run.py (code=exited,   status=200/CHDIR)
Main PID: 3713 (code=exited, status=200/CHDIR)

答案1

你的单元文件是正确的。如果你想在韦恩你只需要引用 Python 二进制文件韦恩目录就像你对/home/user/anaconda3/bin/python

[Unit]
Description=My Script Service
After=multi-user.target

[Service]
Type=idle

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

[Install]
WantedBy=multi-user.target

突出的是您的设备发生故障的原因是:code=exited, status=200/CHDIR。这很可能表明您的脚本存在问题。

如果您想调试它,请执行以下操作:

  1. 在 root 下运行您添加的命令ExecStart=,看看问题是否是由您的脚本引起的。
  2. 如果运行没有错误,请使用 查看日志journalctl -u <unit_name>。这应该会为您提供有关设备问题的更多信息。

附言

以下两个[Service]选项均可用:

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

或者

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

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

相关内容