cron 作业无法读取以前的 cron 日志

Posted

技术标签:

【中文标题】cron 作业无法读取以前的 cron 日志【英文标题】:Cron job cannot read the previous cron logs 【发布时间】:2021-08-31 03:10:57 【问题描述】:

为了检测我的 cron 作业中可能发生的故障,我设置了另一个 cron 作业来检查 crontab 之前发出的日志:

def check_last_cron():
    with open('/home/pi/Desktop/cron_output.log') as f:
        txt = f.read()
        f.close()
        if 'Traceback' in txt:
            print('Traceback detected')
            send_to_phone(txt)
        else:
            print('no Traceback detected')

手动运行时,一切顺利:

脚本读取 检测到单词“Traceback” 把日志发给我

Crontab:

*/5 * * * * python3 /home/pi/Desktop/initialize.py > /home/pi/Desktop/cron_output.log 2>&1
*/5 * * * * python3 /home/pi/Desktop/checker.py > /home/pi/Desktop/log.log 2>&1

但是当使用 crontab 运行时,读取的日志是空的。我错过了什么?

【问题讨论】:

【参考方案1】:

似乎每次重启 cron 作业时都会删除以前的 cron 日志。

添加另一个 cron 作业来检查第一个日志是否正常工作,但只能通过以下时间偏移执行它:

*/5 * * * * python3 /home/pi/Desktop/initialize.py > /home/pi/Desktop/cron_output.log 2>&1
1-59/5 * * * * python3 /home/pi/Desktop/checker.py > /home/pi/Desktop/log.log 2>&1

这个1-59/5每5分钟执行一次checker.py,比initialize.py早一分钟as explained in this post

【讨论】:

【参考方案2】:

我不确定您为什么要同时运行这两个脚本。 checker.py 文件应该在 initialize.py 之后运行。

试试这个 ->

*/5 * * * * python3 /home/pi/Desktop/initialize.py > /home/pi/Desktop/cron_output.log 2>&1

*/6 * * * * python3 /home/pi/Desktop/checker.py > /home/pi/Desktop/log.log 2>&1

plus :- 你目前在log.log 文件中得到了什么? 是no Traceback detected. 吗?

【讨论】:

【参考方案3】:

我完全不确定,但也许这里有 2 件事你可以尝试:

您可以这样做,而不是使用 2 个 cron 作业:
    */5 * * * * python3 /home/pi/Desktop/initialize.py > /home/pi/Desktop/cron_output.log 2>&1 && python3 /home/pi/Desktop/checker.py > /home/pi/Desktop/log.log 2>&1

这样它会在第一个命令之后执行

也许将 sudo 添加到您的第二个命令中,它可能没有读取日志的权限(似乎不太可能,但谁知道)
    sudo python3 /home/pi/Desktop/checker.py > /home/pi/Desktop/log.log 2>&1

【讨论】:

以上是关于cron 作业无法读取以前的 cron 日志的主要内容,如果未能解决你的问题,请参考以下文章

管理由 cron 作业创建的日志文件

如何让运行 Node.js 脚本的 cron 作业从 .env 文件中读取变量?

你怎么得到运行Node.js脚本的cron作业从.env文件中读取变量?

。net核心Web作业中如何从appsettings.json中读取Cron表达式

为啥成功执行 Cron 作业会停止将日志进一步附加到文件中

任务计划cron