Systemd-Python-Skript wird nicht protokolliert (Pufferursache)?

Systemd-Python-Skript wird nicht protokolliert (Pufferursache)?

Obwohl das Problemhier ausgestelltscheint sehr ähnlich zu sein, keine der bereitgestellten Lösungen funktioniert. Kontext:

  • Raspberry Pi Zero W, Raspbian Lite (20.08.2020)
  • Ich möchte ein Python3-Skript als Dienst registrieren, um es im Hintergrund auszuführen

Ich wollte es mit systemd zum Laufen bringen, was mit folgender Konfiguration funktionierte:

application.servicebesteht in/etc/systemd/system/application.service

[Unit]
Description=application
After=multi-user.target


[Service]
User=custom_user
Type=idle
TimeoutSec=0
PIDFile=/run/application.pid
ExecStart=/usr/bin/python3 -u /path/to/application.py >> /path/to/log.log 2>&1
KillMode=control-group
Environment="PYTHONUNBUFFERED=1"

Restart=always
RestartSec=3s

[Install]
WantedBy=multi-user.target

Dieser Dienst wird beim Start in den erwarteten Segmenten (bezogen auf Wantsund WantedByAbschnitte) korrekt geladen.Aber es wird nichts in der Protokolldatei protokolliert, die ich bereitgestellt habe. Sie bemerken Environmentden Eintrag zum Erzwingen PYTHONUNBUFFEREDund dasselbe gilt für das -uArgument, das beim Aufruf der ausführbaren Python-Datei übergeben wird. Dies hat überhaupt keine Auswirkungen.

Wenn ich genau dieselbe Exec-Zeile auf einer CLI starte, wird das Skript ausgeführt UND protokolliert. Über die Dienstdefinition erfolgt überhaupt kein Protokoll.

Randnotizen:

  • Wenn ich journalctldie Ausgabe überprüfe, finde ich meine Protokollzeilen
  • logrotateund log2ramsind auf der Logdatei/dem Verzeichnis eingerichtet

Ich habe am Ende meine Befehlszeile hinzugefügt, /etc/rc.localgefolgt von einem Et-Zeichen. Das ist meiner Meinung nach nicht möglich, da ich diesen Dienst in Bezug auf das System, auf dem er ausgeführt wird, so gut wie möglich registrieren möchte.

Danke für eure Antworten und Aufklärungen.

Antwort1

Sie sollten nicht versuchen, Shell-Umleitungen auf diese Weise zu verwenden. Dies funktioniert nicht, da systemd keine Shell ist. Geben Sie stattdessenStandardOutput=UndStandardError=ausdrücklich, wenn Sie möchten, dass sie an eine andere Stelle als die Zeitschrift weitergeleitet werden.

verwandte Informationen