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 &
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.
Я смог решить проблему путем:
- перенаправление stdin, stdout и stderr
- обеспечение того, чтобы скрипт, вызываемый через nohup, больше не выполнялся в фоновом режиме
PS: мои скрипты были написаны на ksh, работающем на RHEL
Я запускаю свои сценарии следующим образом, и у меня вообще нет проблем:
nohup python my_script.py &> my_script.out &
сравнение с вашим синтаксисом выглядит так, как будто вам не хватает только символа "&" после ввода...