2013-02-01 68 views
3

我有一个cron作业,基本上是这样的:Unix的重定向脚本

*/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重定向的工作方式,对吧?

+0

可能会发生一些缓冲,并且您可能希望在脚本中添加一些刷新功能,例如, '$ stdout.flush' –

回答

1

红宝石过程可能只是缓冲它的输出,设置STDOUT总是刷新其输出,设置同步=真为STDOUT:

STDOUT.sync = true 
1

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