Serviço Systemd - Script Python dentro da Tela na inicialização

3

Estou atualmente executando um script python dentro de uma sessão Screen através deste script em rc.local:

screen -L -dmS pi python /home/pi/truck/main2.py &

Mas eu gostaria que ele fosse executado pelo systemd para que eu possa reiniciá-lo se o script do Python falhar.

Eu tentei criar um serviço em /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

Mas não vai executar o meu script dentro da sessão de tela?

Se eu obtiver uma lista de telas, mostrarei que a sessão de tela "pi" está morta.

    
por TwinToe 13.12.2017 / 14:29

1 resposta

5

Type=simple espera que o processo principal do serviço continue em execução para sempre. Seu comando real, no entanto, está dizendo a Screen para fazer o oposto - iniciar uma nova sessão e chegar ao fundo.

Quando o Screen faz isso, o systemd assume que o serviço foi encerrado e limpa todos os processos restantes - incluindo o processo da tela "em segundo plano". (Isso nem conta como um "fracasso").

Para evitar isso, altere o tipo para forking ou a opção Screen -dm para -Dm .

    
por 13.12.2017 / 16:50