我有一个 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
。这很可能表明您的脚本存在问题。
如果您想调试它,请执行以下操作:
- 在 root 下运行您添加的命令
ExecStart=
,看看问题是否是由您的脚本引起的。 - 如果运行没有错误,请使用 查看日志
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
。