我有一个 ruby 脚本,它会写入 STDOUT,有时也会写入 STDERR。我每 5 分钟通过 crontab 运行一次此脚本:
*/5 * * * * /root/myscript.rb >> /var/log/myscript.log 2>&1
我注意到日志文件不会实时写入。相反,它会等到脚本退出后才一次性写入日志文件。我觉得其他脚本没有这种行为,但也许我错了。
就是这样吗?我应该寻找什么来改变这种行为?
这是 Ubuntu 12.04
答案1
让脚本记录到 syslog 而不是 stdout。从长远来看,这样做比记录到 stdout 更灵活。
答案2
啊,我发现 Ruby 不会在每次写入调用后自动刷新 STDOUT/STDERR 输出。我将其放在STDOUT.sync = true
文件顶部,现在它会实时写入 STDOUT,从而写入日志文件。