Der Grund dafür, dass die Startsequenz nicht abgeschlossen wird, ist, dass für Type forking
erwartet wird, dass Ihr Startprozess verzweigt und beendet wird (siehe $ man systemd.service - Suche nach Gabelung).
Verwenden Sie einfach nur den Hauptprozess, dämonisieren Sie nicht
Eine Möglichkeit ist, weniger zu tun. Mit systemd müssen häufig keine Dämonen erstellt werden, und Sie können den Code direkt ausführen, ohne ihn zu dämonisieren.
from somewhere import Node
check = Node()
check.run()
Dies ermöglicht die Verwendung eines einfacheren aufgerufenen simple
Diensttyps, sodass Ihre Gerätedatei so aussehen würde.
[Unit]
Description=Simplified simple zebra service
After=syslog.target
[Service]
Type=simple
User=node
Group=node
WorkingDirectory=/home/node/Node/
ExecStart=/home/node/Node/node.py
StandardOutput=syslog
StandardError=syslog
[Install]
WantedBy=multi-user.target
Beachten Sie, dass der -u
In-Python-Shebang nicht erforderlich ist. Wenn Sie jedoch etwas auf stdout oder stderr ausdrucken, -u
wird sichergestellt, dass keine Ausgabepufferung vorhanden ist und gedruckte Zeilen sofort von systemd abgefangen und im Journal aufgezeichnet werden. Ohne sie würde es mit einiger Verzögerung erscheinen.
Zu diesem Zweck habe ich die Zeilen StandardOutput=syslog
und in die Einheitendatei eingefügt StandardError=syslog
. Wenn Sie sich nicht für die gedruckte Ausgabe in Ihrem Tagebuch interessieren, interessieren Sie sich nicht für diese Zeilen (sie müssen nicht vorhanden sein).
systemd
macht die Dämonisierung überflüssig
Während der Titel Ihrer Frage explizit nach Daemonisierung fragt, ist der Kern der Frage, wie ich meinen Dienst zum Laufen bringen kann, und während die Verwendung des Hauptprozesses viel einfacher erscheint (Sie müssen sich überhaupt nicht um Daemons kümmern), ist dies der Fall könnte als Antwort auf Ihre Frage angesehen werden.
Ich denke, dass viele Leute Daemonisierung verwenden, nur weil "jeder es tut". Mit systemd sind die Gründe für die Dämonisierung oft überholt. Es kann einige Gründe geben, die Dämonisierung zu verwenden, aber dies wird jetzt selten der Fall sein.
EDIT: python -p
richtig eingestellt python -u
. danke kmftzg