实时重定向 cron 的输出,而不是在程序完成后?

实时重定向 cron 的输出,而不是在程序完成后?

我有一个 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,从而写入日志文件。

相关内容