Systemd 服务 - 启动时屏幕内的 Python 脚本

Systemd 服务 - 启动时屏幕内的 Python 脚本

我目前正在通过 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

Type=simple期望服务的主进程永远运行。然而,你的实际命令却告诉 Screen 做相​​反的事情——启动一个新会话并转入后台。

当 Screen 执行此操作时,systemd 会假定服务已退出,并清理所有剩余进程 - 包括“后台”Screen 进程。(这甚至不算作“失败”。)

为了避免这种情况,请将类型更改为forking,或将屏幕-dm选项更改为-Dm

相关内容