我有一个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文件,只需要像在/home/user/anaconda3/bin/python那样引用venv目录中的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 。 这很可能表明您的脚本中存在一个问题。
如果你想debugging,你会做到以下几点:
ExecStart=的命令ExecStart=就像在根目录下查看,如果问题是由你的脚本引起的。 journalctl -u <unit_name>查看日记。 这应该会给你更多关于你的单位问题的信息。 发布Scriptum
以下两个[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") ,在第一个例子中它将创build一个文件/my_file ,第二个文件/home/user/space/my_file 。