3

基本的に次のようなcronジョブがあります。

*/3 * * * * ruby myscript.rb > /my/location/file.txt

myscript.rb は基本的に次のようになります。

#!/usr/bin/env ruby
sleep(120)
puts "Hello"

したがって、3 分ごとに、STDOUT に書き込む前に 2 分間実行されるスクリプトを実行しています。(実際には、myscript.rb は大量の HTTP リクエストを作成しており、スリープ状態ではありません。私の疑いでは、重要なのは時間です。)

奇妙な結果は、一定の割合で /my/location/file.txt が空になることです。

スクリプトが開始され、ファイルが空になり、スクリプトが最後に到達したときにのみ、ファイルにデータが書き込まれるように見えます。

ただし、これは *nix リダイレクトの仕組みではありませんよね?

4

2 に答える 2

1

file.txtコマンドが実行されるとすぐにが切り捨てられるという点で正しいです。スクリプトがジョブを終了しない限り、ファイルの古い内容が必要な場合は、おそらく別の一時ファイルに書き込んでからfile-tmp.txt、名前をに変更する必要がありますfile.txt。できるだけ早く出力を表示したい場合は、@kyle-burtonのコメントを参照してください。スクリプトをフラッシュする必要があります。

于 2013-02-01T01:42:24.617 に答える
1

rubyプロセスは、おそらく出力をバッファリングしているだけです。STDOUTを常に出力をフラッシュするように設定するには、STDOUTに対してsync=trueを設定します。

STDOUT.sync = true
于 2013-02-01T01:34:59.360 に答える