我有一个基本上看起来像这样的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重定向的工作原理,对吧?
答案 0 :(得分:1)
ruby进程可能只是缓冲它的输出,将STDOUT设置为始终刷新其输出,为STDOUT设置sync = true:
STDOUT.sync = true
答案 1 :(得分:1)
你是对的,因为命令执行后file.txt
被截断。
如果您需要文件的旧内容,除非脚本将完成作业,您可能需要写入另一个临时file-tmp.txt
,然后将其重命名为file.txt
。
如果您只想尽快查看输出,请参阅@ kyle-burton的评论 - 您需要在脚本中刷新。