Nohup не записывает журнал в выходной файл

Я использую следующую команду для запуска python script в фоновом режиме:

nohup ./cmd.py > cmd.log &

Но похоже, что nohup ничего не пишет в файл журнала. cmd.log создается, но всегда пуст. В python script я использую sys.stdout.write вместо print для печати на стандартный вывод. Я делаю что-то неправильно?

Ответ 1

Похоже, вам нужно периодически обновлять stdout (например, sys.stdout.flush()). В моем тестировании Python автоматически не делает это даже при print, пока программа не выйдет.

Ответ 2

Вы можете запустить Python с флагом -u, чтобы избежать буферизации вывода:

nohup python -u ./cmd.py > cmd.log &

Ответ 3

Использование "-u" с "nohup" сработало для меня. Все будет сохранено в файле nohup.out. Нравится this-

nohup python -u your_code.py &

Вы также можете сохранить его в свой каталог. Это way-

nohup python -u your_code.py > your_directory/nohup.out &

Ответ 5

Python 3.3 и выше имеет аргумент flush для печати, и это единственный метод, который работал для меня.

print("number to train = " + str(num_train), flush=True)
print("Using {} evaluation batches".format(num_evals), flush=True)

Ответ 6

У меня была похожая проблема, но не связанная с процессом Python. Я запускал скрипт, который выполнял nohup, и скрипт периодически запускался через cron.

Я смог решить проблему следующим образом:

  1. перенаправление stdin, stdout и stderr
  2. обеспечение того, чтобы скрипт, вызываемый через nohup, больше ничего не выполнял в фоновом режиме

PS: мои скрипты были написаны на ksh, работающем на RHEL