Nohup und Python -u: Es werden immer noch keine Daten in Echtzeit protokolliert.

Beim Starten eines Python-Prozesses im Hintergrund mit

nohup python myscript.py > test.log 2>&1 < /dev/null &

Das Problem ist, dassstdout ist gepuffert: die Daten sindnich in Echtzeit geschrieben antest.log. Die gemeinsame Lösung fürdieses Proble ist zu regelmäßig spülen mitsys.stdout.flush() oder noch besser, wie vorgeschlagen durch diese Antwort, benutzenpython -u :

nohup python -u myscript.py > test.log 2>&1 < /dev/null &

Aber das ist nicht genug. Ich bemerkte, dass es ein paar Stunden lang funktionierte und dann aufhörte zu funktionieren, d.h. nach einigen Stundentest.log wird nicht mehr in Echtzeit geschrieben, auch wenn ich @ verwendet hanohup python -u ....

1) So reproduzieren Sie das Problem (Ich habe ein Standard Debian Jessie). Starten Sie diese Datei:

import time
import datetime
while True:
    print datetime.datetime.now()
    time.sleep(60)

mitnohup python -u myscript.py > test.log 2>&1 < /dev/null &. Die Protokolldatei wird innerhalb weniger Stunden aktualisiert. Nach 3 oder 4 Stunden wirdnicht nicht mehr

2)Wie löse ich dieses Problem?, ohne @ einfügen zu müssstdout.flush() alle 2 Zeilen im Code (hässliche Lösung)?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage