长时间运行的脚本的Unixredirect

我有一个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是空的。

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

这不是如何* nixredirect工作,对吗?

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

 STDOUT.sync = true 

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