Служба Systemd - скрипт Python всередині екрана при завантаженні


3

В даний час я використовую скрипт python всередині екрану через цей скрипт у 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

Але він не буде працювати мій скрипт всередині екрану сесії?

Якщо я отримаю список запущених екранів, це показує, що екранна сесія "pi" мертва.


Подивіться на unix.stackexchange.com, я був би радий вам допомогти!
user2531336

Чи існує особлива причина для використання екрана взагалі?
grawity

Я запускаю Raspberry Pi без голови і хотів би SSH в моєму сценарії. Ось чому я використовую екран.
TwinToe

Відповіді:


5

Type=simple очікує, що основний процес служби продовжуватиметься назавжди. Ваша фактична команда, однак, говорить екрану, щоб зробити навпаки - почати нову сесію і розщедритися до фону.

Коли Screen робить це, systemd припускає, що служба вийшла, і очищає всі залишилися процеси - в тому числі "фон" екранний процес. (Це навіть не вважається "провалом".)

Щоб уникнути цього, змініть тип на forkingабо екран -dm опцію -Dm.


Зміна типу на розгалуження зробила свою справу. Дякую!
TwinToe
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.