繁体   English   中英

Nohup 没有将日志写入输出文件

[英]Nohup is not writing log to output file

我正在使用以下命令在后台运行 python 脚本:

nohup ./cmd.py > cmd.log &

但似乎 nohup 没有向日志文件写入任何内容。 cmd.log 已创建但始终为空。 在 python 脚本中,我使用sys.stdout.write而不是print来打印到标准输出。 我做错了什么吗?

您可以使用-u标志运行 Python 以避免输出缓冲:

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

看起来您需要定期刷新标准输出(例如sys.stdout.flush() )。 在我的测试中,即使使用print Python 也不会自动执行此操作,直到程序退出。

  • -unohup一起使用对我nohup 使用-u将强制stdoutstderr流无缓冲。 它不会影响标准输入。 一切都将保存在“ nohup.out ”文件中。 像这样-

     nohup python -u your_code.py &

    您也可以将其保存到您的目录中。 这条路-

     nohup python -u your_code.py > your_directory/nohup.out &
  • 此外,您可以使用PYTHONUNBUFFERED 如果将其设置为非空字符串,它将与-u选项相同。 在运行 python 代码之前使用这个运行下面的命令。

     export PYTHONUNBUFFERED=1

    要么

    export PYTHONUNBUFFERED=TRUE

PS-我会建议使用像 cron-job 这样的工具在后台运行和计划执行。

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

要么

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

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

Python 3.3 及更高版本有一个用于打印的刷新参数,这是唯一对我有用的方法。

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:我的脚本是用在 RHEL 上运行的 ksh 编写的

我按以下方式运行我的脚本,我完全没有问题:

nohup python my_script.py &> my_script.out &

与您的语法相比,您输入后似乎只缺少一个“&”符号...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM