Die Python-Protokollierungsklasse funktioniert nicht, wenn stdout an / dev / null gesendet wird

1006
Qlii256

Ich habe ein Python 3-Skript, für das die Protokollierung aktiviert ist (zu Debugging-Zwecken). Jedes Mal, wenn ich dieses Skript starte / ausführt, funktioniert es einwandfrei und die Protokolldateien werden erstellt.

Ich habe auch ein setup.sh-bash-Skript erstellt, um meine Anwendung herunterzuladen und zu installieren. Das Skript wird dann automatisch mit nohup gestartet, damit es im Hintergrund ausgeführt wird. Auf diesen Befehl folgt> / dev / null 2> & 1 & gibt also nichts an die Konsole aus. Dadurch wird jedoch das Logging-Modul von Python "fehlerhaft", da es nichts mehr in die Log-Dateien ausgeben kann. Es wird nach / dev / null ausgegeben, wenn ich korrekt bin.

Ich habe online nach einer Lösung gesucht, aber bei jedem Versuch bin ich fehlgeschlagen. Ich hoffe, dass jemand eine Idee dazu hat. Vielleicht sollte ich etwas anderes verwenden, um mein Skript für immer laufen zu lassen (bis zum Neustart natürlich :)) mit der Möglichkeit, das Python 3-Protokollierungsmodul zu verwenden und keine Ausgabe in der Konsole zu haben.

Der genaue Befehl, den ich zum Starten meines Skripts verwende, lautet wie folgt:

su -l -s /bin/bash scriptuser -c 'nohup python3 '/etc/scriptroot/main.py > /dev/null 2>&1 &'

Danke im Voraus

0

1 Antwort auf die Frage

1
Qlii256

Es tut mir sehr leid, dass ich jetzt selbst die Lösung gefunden habe. Es scheint, dass ich nicht tief genug gegraben habe. Ich verwende jetzt Daemon-Start-Stopp, das von den meisten UNIX-Systemen unterstützt wird, und es funktioniert wie vorgesehen.

Ich habe ein Tutorial im Internet verfolgt, das Sie hier finden können: http://blog.scphillips.com/2013/07/getting-a-python-script-to-run-in-the-background-as-a-service -auf-boot /

Ich hoffe, das hilft bei vielen anderen Benutzern, die das gleiche Problem haben / nach der gleichen Antwort suchen.

Thansk zum Lesen.