Сервис Systemd - скрипт Python внутри экрана при загрузке

1551
TwinToe

В настоящее время я запускаю скрипт 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 

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

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

3
Увидимся на unix.stackexchange.com, я был бы рад вам помочь! user2531336 6 лет назад 0
Есть ли особая причина использовать Screen вообще? grawity 6 лет назад 0
Я использую Raspberry Pi без головы и хотел бы использовать SSH в своем сценарии. Вот почему я использую Screen. TwinToe 6 лет назад 0

1 ответ на вопрос

5
grawity

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

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

Чтобы избежать этого, либо измените тип на forking, либо выберите -dmпараметр Экран на -Dm.

Смена Типа на разветвление сделала свое дело. Спасибо! TwinToe 6 лет назад 0

Похожие вопросы