Nohup e Python -u: ainda não registra dados em tempo real
Ao iniciar um processo Python, em segundo plano, com
nohup python myscript.py > test.log 2>&1 < /dev/null &
o problema é questdout
é armazenado em buffer: os dados sãonão escrito em tempo real paratest.log
. A solução comum paraeste problema élavar periodicamente comsys.stdout.flush()
, ou melhor ainda, como sugeridopor esta resposta, usarpython -u
:
nohup python -u myscript.py > test.log 2>&1 < /dev/null &
Mas isto não é o suficiente. Notei que funcionou durante algumas horas e depois parou de funcionar,ou seja, depois de algumas horastest.log
não é mais escrito em tempo real, mesmo que eu useinohup python -u ...
.
1)É assim que se reproduz o problema (Eu tenho um Debian Jessie padrão). Inicie este arquivo:
import time
import datetime
while True:
print datetime.datetime.now()
time.sleep(60)
comnohup python -u myscript.py > test.log 2>&1 < /dev/null &
. O arquivo de log será atualizado por algumas horas e depois de 3 ou 4 horas,nada não mais.
2)Como resolver este problema, sem precisar inserirstdout.flush()
a cada 2 linhas no código (solução feia)?