为了检测我的 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')
手动运行时,一切顺利:
- 脚本内容如下
- 检测"追溯"一词
- 向我发送日志
克朗塔布:
*/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 运行时,日志读取为空。我错过了什么?
我完全不确定,但也许这里有两件事你可以尝试:
- 与其使用 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
我不确定为什么要同时运行这两个脚本。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
另外 :- 您目前在log.log
文件中得到了什么? 是no Traceback detected.
吗?
似乎每次重新启动 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 前一分钟,如本文所述