Nohup is not writing log to output file

坚强是说给别人听的谎言 提交于 2019-11-27 05:03:18

问题


I am using the following command to run a python script in the background:

nohup ./cmd.py > cmd.log &

But it appears that nohup is not writing anything to the log file. cmd.log is created but is always empty. In the python script, I am using sys.stdout.write instead of print to print to standard output. Am I doing anything wrong?


回答1:


It looks like you need to flush stdout periodically (e.g. sys.stdout.flush()). In my testing Python doesn't automatically do this even with print until the program exits.




回答2:


You can run Python with the -u flag to avoid output buffering:

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



回答3:


Using '-u' with 'nohup' worked for me. Everything will be saved in "nohup.out " file. Like this-

nohup python -u your_code.py &

You can also save it into your directory. This way-

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



回答4:


export PYTHONUNBUFFERED=1
nohup ./cmd.py > cmd.log &

or

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

https://docs.python.org/2/using/cmdline.html#cmdoption-u




回答5:


Python 3.3 and above has a flush argument to print and this is the only method that worked for me.

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



回答6:


I had a similar issue, but not connected with a Python process. I was running a script which did a nohup and the script ran periodically via cron.

I was able to resolve the problem by:

  1. redirecting the stdin , stdout and stderr
  2. ensuring the the script being invoked via nohup didn't run anything else in the background

PS: my scripts were written in ksh running on RHEL



来源:https://stackoverflow.com/questions/12919980/nohup-is-not-writing-log-to-output-file

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!