3

我有一个基本上看起来像这样的 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 重定向的工作原理,对吧?

4

2 回答 2

1

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

STDOUT.sync = true
于 2013-02-01T01:34:59.360 回答
1

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

于 2013-02-01T01:42:24.617 回答