我有一个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
现在,问题在于输出日志。我的程序应该每分钟写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客户端来检查我的文件。
由于
答案 0 :(得分:2)
stdout的数据是缓冲的,我认为是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
或
30 09 * * 1-5 cd /home/IBpy && stdbuf -i0 -o0 -e0 python RealTimedata.py >> /home/logs/realtimedata.op 2>> /home/logs/realtimedata.er