我有一个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
。 如果你只是想尽快看到输出,请看@凯尔 – 伯顿的评论 – 你需要在脚本中刷新。