2

nohup で実行されている Ruby スクリプトの出力に奇妙な問題がありました。基本的に、ログファイルに書き込むとき、または stdout を nohup.out に書き込むときに、深刻な出力遅延があります。元の投稿をここで見ることができます。これは、そのユース ケースに対して回答されています。

StackOverflow - 質問 19455667

のようなものを使用することが提案され file_object.sync = true ましたが、スクリプトが nohup の下にある場合にのみこれが発生する理由の詳細に興味があります。nohup が独自のシェル出力をバッファリングする方法には、より深い複雑さがあると思います。そうすれば、より詳細な出力があれば、より洗練されたソリューションを実装できます。

追加のリソースをいただければ幸いです。

仕様: 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 に答える