nohup下Ruby脚本可能出现的I / O同步问题?

时间:2013-10-18 23:02:34

标签: linux ruby nohup

在nohup下运行的Ruby脚本输出有一个奇怪的问题。基本上,写入日志文件或使用stdout到nohup.out时会出现严重的输出延迟。您可以在此处查看原始帖子,该帖子已针对该用例进行了解答:

StackOverflow - Question 19455667

有人建议我使用类似的东西     file_object.sync = true 哪个有效,但我对于为什么只有在脚本处于nohup下时才会发生这种情况的细节感兴趣。我猜测nohup如何缓冲它自己的shell输出有更深层次的复杂性。这样,如果我有更详细的输出,我可以实现更优雅的解决方案。

赞赏任何其他资源。

规格: Ruby 1.8.7 Linux:见过CentOS 5.4,5.6和Amazon Linux AMI版本2012.03(有点类似于CentOS 6.2) Nohup:8.4

1 个答案:

答案 0 :(得分:2)

这是因为当你的STDOUT没有连接到tty,而是文件时,使用了块大小的缓冲,如果它连接到tty,则使用基于行的缓冲。

如果在没有NOHUP的情况下运行命令,输出(stdout和stderr)仍将连接到相同的tty,并且它将是行缓冲的。 NOHUP的默认行为是写入nohup.out文件。由于缓冲区通常比线条大很多,因此“显示”结果需要更长的时间。