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

Twi*_*Toe 7 linux python gnu-screen systemd

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

screen -L -dmS pi python /home/pi/truck/main2.py &
Run Code Online (Sandbox Code Playgroud)

但我希望它通过 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
Run Code Online (Sandbox Code Playgroud)

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

如果我得到一个正在运行的屏幕列表,它表明屏幕会话“pi”已死。

use*_*686 13

Type=simple期望服务的主进程永远继续运行。然而,你的实际命令是告诉 Screen 做相​​反的事情——开始一个新的会话并分叉到后台。

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

为避免这种情况,forking请将type 更改为,或将 Screen-dm选项更改为-Dm