2013-06-18 5 views
4

Я бег сценария питона на сервере Linux с поЬирами так:нет сообщений об ошибках с nohup и python?

nohup python3 ./myscript.py > ./mylog.log & 

Он работает и сценарий записывает лог-файл, но проблема в том, что сообщения об ошибках питона/брошенные исключения, кажется, не пишутся в файл журнала. Как я мог это достичь?

Это что-то связано с stderr? (но он говорит: «nohup: перенаправление stderr в stdout», когда я запускаю сценарий.)

Это длинный скрипт, и через некоторое время скрипт перестает работать из-за какой-то проблемы и с отсутствующими сообщениями об ошибках Не знаю, почему. Проблемы возникают всегда через несколько дней, так что это действительно боль для отладки.

Редактировать: Может ли это иметь какое-то отношение к флешу? Поскольку мои собственные принты используют флеш, но, возможно, ошибки python не так, они не отображаются в файле после прекращения сценария?

ответ

7

Я нашел причину. Это действительно была проблема буферизации (см. Мое редактирование выше). :)

nohup python3 -u ./myscript.py > ./mylog.log & 

С параметром python -u он работает. Он отключает буферизацию.

Теперь я могу идти об ошибке охота ...

+0

Я использовал http://unix.stackexchange.com/questions/45913/is-there-a-way-to-redirect-nohup-output-to-a-log-file-other-than-nohup-out для разделения stdout и stderr, но я думаю, что он не работал из-за вашей же проблемы с небуферизованным флагом. https://docs.python.org/2/using/cmdline.html#cmdoption-u – Cyrille

+0

Это решение не всегда работает, [см. здесь] (http://stackoverflow.com/questions/34753765/nohup-and-python-u-it-still-doesnt-log-data-in-realtime). – Basj

1

Вы только перенаправляете stdout. Сообщения об ошибках передаются на stderr. Перезапустите ваш сценарий, как это:

nohup python3 ./myscript.py &> ./mylog.log & 

&> перенаправляет весь вывод (STDOUT и STDERR) в файл журнала.

+0

теперь говорит: «поЬир: добавление выход к„nohup.out“» и mylog.log не привыкают. ошибки все еще не отображаются. – horace