Nohup и Python -u: он все еще не регистрирует данные в реальном времени
При запуске процесса Python, в фоновом режиме, с
nohup python myscript.py > test.log 2>&1 < /dev/null &
проблема в том, чтоstdout
буферизируется: данныене написано в режиме реального времениtest.log
, Общее решениеЭта проблема это кпериодически промывать сsys.stdout.flush()
или даже лучше, как предложеноэтим ответом, использоватьpython -u
:
nohup python -u myscript.py > test.log 2>&1 < /dev/null &
Но этого недостаточно, Я заметил, что это работало в течение нескольких часов, а затем перестало работать,то есть через несколько часовtest.log
больше не пишется в реальном времени, даже если я использовалnohup python -u ...
.
1)Это как воспроизвести проблему (У меня есть стандартный Debian Jessie). Запустите этот файл:
import time
import datetime
while True:
print datetime.datetime.now()
time.sleep(60)
сnohup python -u myscript.py > test.log 2>&1 < /dev/null &
, Файл журнала будет обновлен в течение нескольких часов, а затем через 3 или 4 часа,ничего такого больше.
2)Как решить эту проблемубез необходимости вставлятьstdout.flush()
каждые 2 строки в коде (некрасивое решение)?