系统化服务 - 启动时屏幕内的Python脚本

时间:2017-12-12 12:33:36

标签: python linux systemd gnu-screen

我目前通过rc.local中的脚本在Screen会话中运行python脚本:

screen -L -dmS pi python /home/pi/truck/main2.py & 

但是我想通过systemd运行它,所以如果Python脚本崩溃我可以重新启动它。

我尝试在/systemd/system/myscript.service

中创建服务
[Unit]
Description=myscript
After=network.target

[Service]
Type=simple
Restart=on-failure
RestartSec=3
ExecStart=/usr/bin/screen -L -dmS pi  python /home/pi/truck/main2.py

[Install]
WantedBy=multi-user.target

但它不会在Screen会话中运行我的脚本吗?

如果我得到一个正在运行的屏幕列表,它会显示屏幕会话" pi"已经死了。

1 个答案:

答案 0 :(得分:0)

尝试使用显式路径,例如......

ExecStart=/usr/bin/bash -c '/usr/bin/screen -L -dmS pi  /usr/bin/python /home/pi/truck/main2.py'

通常,您可以通过迭代调用来调试这些 例如,在 terminal 中尝试(并继续每次成功)

  1. /usr/bin/python /home/pi/truck/main2.py
  2. /usr/bin/screen -L -dmS pi /usr/bin/python /home/pi/truck/main2.py
  3. /usr/bin/bash -c '/usr/bin/screen -L -dmS pi /usr/bin/python /home/pi/truck/main2.py'
  4. 如果#3 按预期工作,则将其复制到服务文件中。在这一天结束的时候,在这种情况下,systemd所有人都在做这件事。如果您尝试以不同的用户身份运行脚本,则在调试 root