【问题标题】:Cron job cannot read the previous cron logscron 作业无法读取以前的 cron 日志
【发布时间】: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 运行时,读取的日志是空的。我错过了什么?

【问题讨论】:

    标签: python python-3.x cron


    【解决方案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
        

        【讨论】:

          最近更新 更多