Nohup y Python -u: todavía no registra datos en tiempo real
Al iniciar un proceso de Python, en segundo plano, con
nohup python myscript.py > test.log 2>&1 < /dev/null &
el problema es esestdout
está almacenado: los datos sonno escrito en tiempo real paratest.log
. La solución común aeste problema Es paraenjuagar periódicamente consys.stdout.flush()
o incluso mejor, como se sugierepor esta respuesta, usarpython -u
:
nohup python -u myscript.py > test.log 2>&1 < /dev/null &
Pero esto no es suficiente. Noté que funcionó durante unas horas, y luego, dejó de funcionar,es decir, después de unas horastest.log
ya no está escrito en tiempo real, incluso si usabanohup python -u ...
.
1)Así es como reproducir el problema (Tengo un Debian Jessie estándar). Comience este archivo:
import time
import datetime
while True:
print datetime.datetime.now()
time.sleep(60)
connohup python -u myscript.py > test.log 2>&1 < /dev/null &
. El archivo de registro se actualizará durante unas pocas horas y luego, después de 3 o 4 horas,nada nunca más.
2)Cómo resolver este problema, sin tener que insertarstdout.flush()
cada 2 líneas en el código (solución fea)?