Unix重定向长时间运行的脚本

时间:2013-02-01 01:32:54

标签: linux io-redirection

我有一个基本上看起来像这样的cron作业:

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

myscript.rb基本上是这样的:

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

所以每隔三分钟我就会运行一个运行两分钟的脚本,然后再写入STDOUT。 (事实上​​,myscript.rb正在发出大量的HTTP请求,而不是在睡觉。我怀疑这是重要的时间。)

奇怪的结果是,在某些时间内,/ my / location / file.txt为空。

似乎好像脚本启动,文件被清空,只有当脚本到达结尾时才会有数据写入文件。

这不是* nix重定向的工作原理,对吧?

2 个答案:

答案 0 :(得分:1)

ruby​​进程可能只是缓冲它的输出,将STDOUT设置为始终刷新其输出,为STDOUT设置sync = true:

STDOUT.sync = true

答案 1 :(得分:1)

你是对的,因为命令执行后file.txt被截断。 如果您需要文件的旧内容,除非脚本将完成作业,您可能需要写入另一个临时file-tmp.txt,然后将其重命名为file.txt。 如果您只想尽快查看输出,请参阅@ kyle-burton的评论 - 您需要在脚本中刷新。