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

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

nohup ./cmd.py > cmd.log &

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

7 ответов

Решение

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

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

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

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

nohup python -u code.py &
export PYTHONUNBUFFERED=1
nohup ./cmd.py > cmd.log &

или же

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

https://docs.python.org/2/using/cmdline.html

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

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

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

Я смог решить проблему путем:

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

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

Я запускаю свои сценарии следующим образом, и у меня вообще нет проблем:

      nohup python my_script.py &> my_script.out &

сравнение с вашим синтаксисом выглядит так, как будто вам не хватает только символа "&" после ввода...

Другие вопросы по тегам