Systemd-Dienst - Python-Skript in Screen beim Start

1652
TwinToe

Ich arbeite gerade ein Python-Skript in einer Screen-Sitzung durch dieses Skript in rc.local:

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

Aber ich möchte, dass es durch systemd läuft, damit ich es neu starten kann, wenn das Python-Skript abstürzt.

Ich habe versucht, einen Dienst in /systemd/system/myscript.service zu erstellen

[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 

Aber es wird mein Skript nicht in der Screen-Sitzung laufen?

Wenn ich eine Liste laufender Bildschirme bekomme, wird angezeigt, dass die Bildschirmsitzung "pi" tot ist.

3
Besuchen Sie mich auf unix.stackexchange.com, ich würde Ihnen gerne helfen! user2531336 vor 6 Jahren 0
Gibt es einen bestimmten Grund, Screen überhaupt zu verwenden? grawity vor 6 Jahren 0
Ich verwende einen Raspberry Pi ohne Kopf und möchte SSH in mein Skript einbauen. Deshalb verwende ich Screen. TwinToe vor 6 Jahren 0

1 Antwort auf die Frage

5
grawity

Type=simpleerwartet, dass der Hauptprozess des Dienstes für immer weiterläuft. Ihr eigentlicher Befehl sagt Screen jedoch, dass er das Gegenteil tun soll - eine neue Sitzung starten und in den Hintergrund wechseln.

Wenn Screen das tut, geht systemd davon aus, dass der Dienst beendet wurde, und bereinigt alle verbleibenden Prozesse - einschließlich des "Hintergrund" -Prozesses. (Dies zählt nicht einmal als "Versagen".)

Um dies zu vermeiden, ändern Sie entweder type in forkingoder die -dmOption Screen in -Dm.

Den Typ zu ändern machte den Trick. Vielen Dank! TwinToe vor 6 Jahren 0