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