告诉 nohup 实时写入输出

Telling nohup to write output in real-time

当使用 nohup 时,脚本的输出会被缓冲,只有在脚本执行完毕后才会转储到日志文件 (nohup.out) 中。以接近实时的方式查看脚本输出以了解其进展情况将非常有用。 有没有办法让 nohup 在脚本生成输出时写入输出?或者,由于如此频繁的文件访问操作很慢,因此在执行期间定期转储输出?

您正在执行的命令是什么?您可以创建一个 .bash 文件,其中在每个命令后将输出重定向到文件(echo "blabh" >> your-output.txt),这样您就可以在 nohup 执行期间检查该文件(你应该 运行: nohup script.bash &)

干杯

为此有一个特殊的程序:unbuffer!参见 http://linux.die.net/man/1/unbuffer

想法是您的程序的输出例程识别出 stdout 不是终端 (isatty(stdout) == false),因此它们将输出缓冲到某个最大大小。使用 unbuffer 程序作为程序的包装器将 "trick" 一次写入一行输出,就像在交互式终端中直接 运行 程序一样。

请使用stdbuf。它是从 7.5 开始添加到 GNU coreutils 中的。

stdbuf  -i0 -o0 -e0 cmd

使用 nohup 命令,例如:

nohup stdbuf -i0 -o0 -e0 ./server >> log_server.log 2>&1  

Reference