3

В настоящее время я запускаю скрипт python в сеансе Screen через этот скрипт в rc.local:

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

Но это не будет запускать мой сценарий внутри сеанса экрана?

Если я получаю список запущенных экранов, это показывает, что сеанс экрана "пи" мертв.

1 ответ1

6

Type=simple ожидает, что основной процесс службы будет работать вечно. Однако ваша настоящая команда говорит Screen сделать обратное - начать новый сеанс и переходить в фоновый режим.

Когда Screen делает это, systemd предполагает, что служба закрылась, и очищает все оставшиеся процессы, включая "фоновый" процесс Screen. (Это даже не считается "провалом".)

Чтобы избежать этого, либо измените тип на forking , либо опцию Screen -dm на -Dm .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .