cron 作业未正确将输出写入输出日志文件

sur*_*raj 1 python linux ubuntu cron

我有一个 cron 作业(一个 python 程序),每周日上午 9:30(美国东部时间)开始,一直运行到下午 4:15(美国东部时间)。程序在下午 4:15 后自动终止。我设置 cron 作业的方式是这样的。

30 09 * * 1-5 cd /home/IBpy && python RealTimedata.py >> /home/logs/realtimedata.op 2>> /home/logs/realtimedata.er
Run Code Online (Sandbox Code Playgroud)

现在,问题出在输出日志上。我的程序每分钟应该写入 30-40 行到输出文件(realtimedata.op)。我正在使用 WIN-SCP 检查我的输出日志,我发现 cron 作业在 2-3 分钟后将输出日志写入日志文件,而不是在它到达时立即写入。我每 30 秒刷新一次并检查输出日志。例如:- 假设我安排程序在上午 9:30 开始,我只能在上午 9:34 之后检查前 3 分钟的日志。

另一件事是,尽管我的程序一直成功运行到最后,但文件中缺少最后 8-10 分钟的日志数据。我无法找到原因。这是CRON的问题吗?或者我的 CRON 作业调度有什么问题吗?或者这是我用来检查日志的WIN-SCP的问题?如果这是 WIN-SCP 的问题,请建议我使用比 WINSCP 更好的 FTP 客户端来检查我的文件。

谢谢

Wal*_*r A 6

标准输出的数据是缓冲的,我认为是 4K 块。您可以尝试 stdbuf 或 unbuffer 命令,如Turn-off-buffering上所述。
测试哪一个最适合。

crontab 命令看起来像

30 09 * * 1-5 cd /home/IBpy && unbuffer python RealTimedata.py >> /home/logs/realtimedata.op 2>> /home/logs/realtimedata.er
Run Code Online (Sandbox Code Playgroud)

或者

30 09 * * 1-5 cd /home/IBpy && stdbuf -i0 -o0 -e0 python RealTimedata.py >> /home/logs/realtimedata.op 2>> /home/logs/realtimedata.er
Run Code Online (Sandbox Code Playgroud)