[使用nohup
时,脚本的输出被缓冲,仅在脚本执行完毕后才转储到日志文件(nohup.out)。以接近实时的方式查看脚本输出,以了解其进展情况,这将非常有用。有没有办法让nohup
在脚本产生输出时写入输出?或者,由于这种频繁的文件访问操作很慢,因此要在执行期间定期转储输出?
有一个特殊的程序可以:缓冲!参见http://linux.die.net/man/1/unbuffer
想法是程序的输出例程会识别stdout不是终端(isatty(stdout) == false
),因此它们会将输出缓冲到最大大小。使用unbuffer
程序作为程序的包装程序,将“欺骗”它一次写入一行输出,就像直接在交互式终端中运行该程序一样。
您正在执行什么命令?您可以创建一个.bash文件,该文件内部将在每个命令后将输出重定向到文件(如echo“ blabh” >> your-output.txt),以便您可以在执行nohup期间检查该文件(应运行:nohup script.bash &)
欢呼声
请使用stdbuf
。从7.5起在GNU coreutils
中添加了它。
stdbuf -i0 -o0 -e0 cmd
[带有nohup
的命令,如:
nohup stdbuf -i0 -o0 -e0 ./server >> log_server.log 2>&1