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 日志的主要内容,如果未能解决你的问题,请参考以下文章
如何让运行 Node.js 脚本的 cron 作业从 .env 文件中读取变量?
你怎么得到运行Node.js脚本的cron作业从.env文件中读取变量?