2

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

StackOverflow - 问题 19455667

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

任何额外的资源表示赞赏。

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

4

1 回答 1

2

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

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

于 2013-10-22T23:43:42.280 回答