
Ich möchte die Ausgabe eines Python-Skripts protokollieren. So sieht sie aus:
arm@stackoverflow > cat test.py
#!/usr/bin/python
from time import sleep
while True:
print("Hello")
sleep(1)
Ich versuche, die standardmäßige Syslog-Methode zur Protokollverarbeitung zu verwenden. Daher habe ich versucht, JournalD und SystemD so zu konfigurieren, dass alles wie folgt gesendet wird Syslog
:
arm@stackoverflow > cat /etc/systemd/journald.conf | grep -vP "^#"
[Journal]
ForwardToSyslog=yes
arm@stackoverflow > cat /etc/systemd/system/testservice.service
[Unit]
Description="Test service"
StartLimitIntervalSec=500
StartLimitBurst=10
[Service]
Type=Simple
Restart=on-failure
RestartSec=5s
ExecStart=/home/pi/test.py
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=testservice
[Install]
WantedBy=multi-user.target
Schließlich verwende ich Debians Standard-Rsyslog, um meine Protokolle in eine Datei zu leiten:
arm@stackoverflow > tail -n1 /etc/rsyslog.conf
if $programname == 'testservice' then /var/log/testservice.log
arm@stackoverflow > sudo touch /var/log/testservice.log && sudo chmod a+rw /var/log
Aber wenn ich das Ganze starte, scheinen alle Protokolle irgendwo verstopft zu sein und werden eine Stunde nach dem Start freigegeben (wie ein großer Despool):
arm@stackoverflow > sudo systemctl start testservice.service && sleep 30
Dann:
arm@stackoverflow > tail /var/log/testservice.log #nothing
Prüfungen:
arm@stackoverflow > sudo systemctl status testservice.service
● testservice.service - "Test service"
Loaded: loaded (/etc/systemd/system/testservice.service; disabled; vendor preset: enabled)
Active: active (running) since Tue 2023-02-21 09:20:06 CET; 1min 33s ago
arm@stackoverflow > ps aux | grep test
root 23488 0.0 0.6 13956 5968 ? Ss 09:20 0:00 /usr/bin/python /home/pi/test.py
Wissen Sie, wie Sie diese Protokolle in Echtzeit erhalten?
Sonstiges: Dies ist ein Testserver auf Raspberry Pi OS (ARM)
Antwort1
Dank @meuh hat das Hinzufügen eines Flags -u
zum Python-Skript geholfen. Ich habe es zur Shebang-Zeile hinzugefügt:
#!/usr/bin/python -u