我有一个 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)
您的单位文件是正确的。如果你想在venv下运行任何 python 文件,你只需要像使用 venv 一样引用venv目录中的 python 二进制文件
/home/user/anaconda3/bin/python
突出的是您的设备失败的原因:
code=exited, status=200/CHDIR
. 这很可能表明您的脚本中存在问题。如果要调试它,您将执行以下操作:
ExecStart=
就像在根目录下一样,看看问题是否是由您的脚本引起的。journalctl -u <unit_name>
. 这应该会给你一些关于你的单位问题的更多信息。后经
以下两个
[Service]
选项都有效:或者
唯一的区别是脚本中的相对调用从不同的目录运行。因此,如果您的脚本包含一行
open("my_file", "w")
,则在第一个示例中它将创建一个文件/my_file
,第二个示例将创建一个文件/home/user/space/my_file
。