一索

クジャクは夜にプログラミングします

nohupで終了するまで標準出力がなされないことの対策

毎秒現在時刻を出力するRubyコードをnohupで実行し、その標準出力をリアルタイムにファイルに書き出すことを考えます。

$ nohup ruby -e 'loop{puts Time.now; sleep 1}' >exec.log &
$ tail -F exec.log

こう書くと、exec.logの中身がnohupをkillするまで出力されない場合があります。リアルタイムにログを確認する時、そうなってしまうと不便です。これはSTDOUT.flushすることで解決できます。

nohup ruby -e 'loop{puts Time.now; STDOUT.flush; sleep 1}' > exec.log &

他のスクリプト言語でも、この問題が発生する場合は標準出力のflushを明示すると良いと思われます。