5

我使用 nohup 在 linux 服务器上运行 python 脚本,如下所示:

nohup python3 ./myscript.py > ./mylog.log &

它可以工作并且脚本会写入日志文件,但问题是 python 错误消息/抛出的异常似乎没有写入日志文件。我怎么能做到这一点?

这与stderr有关吗?(但是当我启动脚本时它说:“nohup:将标准错误重定向到标准输出”。)

这是一个长时间运行的脚本,一段时间后,有时脚本会因为某些问题而停止工作,并且缺少错误消息,我不知道为什么。问题总是在几天后发生,所以调试起来真的很痛苦。

编辑:这可能与冲洗有关吗?由于我自己的打印使用flush,但也许python错误没有,所以一旦脚本中止它们就不会出现在文件中?

4

3 回答 3

11

我找到了原因。这确实是缓冲问题(见我上面的编辑)。:)

nohup python3 -u ./myscript.py > ./mylog.log &

使用 python -u 参数它可以工作。它禁用缓冲。

现在我可以去寻找虫子了……

于 2013-06-18T09:51:18.600 回答
3

您只是重定向标准输出。错误消息在 stderr 上给出。像这样重新运行您的脚本:

nohup python3 ./myscript.py &> ./mylog.log &

&>所有输出(stdout 和 stderr)重定向到您的日志文件。

于 2013-06-18T08:09:24.033 回答
0

使用 nohup,除非您专门将错误日志重定向到第二个文件,否则不会记录错误,如下所示

nohup python myscript.py > out.log 2> err.log

您还可以将日志和 error.log 重定向到相同的文件

nohup python myscript.py > out.log2>&1

Python 在写入日志之前缓存到缓冲区中。获取“无缓冲”的实时日志使用-u标志。

nohup python -u myscript.py > out.log2>&1

要在后台运行并重新捕获提示&,请在末尾添加

nohup python -u myscript.py > out.log2>&1 &
于 2019-05-22T15:08:51.367 回答