告诉nohup实时写输出

时间:2015-01-30 12:26:38

标签: bash output real-time nohup

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

您执行的命令是什么?您可以创建一个.bash文件,里面的内容是在每个命令之后将输出重定向到文件(echo“blabh”>>&output.txt),这样您就可以在nohup执行期间检查该文件(您应该运行:nohup script .bash&)

干杯

答案 2 :(得分:0)

请使用stdbuf。从7.5起在GNU coreutils中添加了它。

stdbuf  -i0 -o0 -e0 cmd

带有nohup的命令,例如:

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

Reference