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

Modified on: Sun, 18 Aug 2019 21:00:03 +0800

我有一个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)?

[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
作者:,Jasmine

最佳答案

您的单位文件是正确的。如果你想在 venv 下运行任何python文件,你只需要引用 venv 目录中的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. 运行您添加到ExecStart=的命令,与root下的命令完全相同,如果问题是由您的脚本引起的。
  2. 如果运行没有错误,请使用journalctl -u <unit_name>查看日记。这应该可以为您提供有关您单位问题的更多信息。
  3. 醇>

    Post Scriptum

    以下[Service]选项均有效:

    [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
    

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

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

作者:,Daniel

相关问答

添加新评论