我有以下 cronjob:
@reboot /usr/local/bin/python3.9 /home/pi/push_bullet/push_bullet_socket.py >> /var/log/push_bullet_socket.py.log 2>&1
这是我的 crontab 上唯一的东西。当我查看 /var/log/push_bullet_socket.py.log 时,我看到该文件存在,但没有任何标准输出被发送到文件。该脚本在不作为 cronjob 运行时可以正常工作,并且除了没有记录输出之外,它作为 cronjob 可以正常工作。我可以确认打印语句正在 python 脚本中运行,但由于某种原因,它们没有被输出到日志文件中。
这是重启后 cron.log 中的内容:
May 2 10:01:03 raspberrypi cron[351]: (CRON) INFO (pidfile fd = 3)
May 2 10:01:03 raspberrypi cron[351]: (CRON) INFO (Running @reboot jobs)
May 2 10:01:03 raspberrypi CRON[401]: (root) CMD (python /bin/push_bullet_socket.py >> /var/log/push_bullet_socket.py.log 2>&1)
May 2 10:01:03 raspberrypi CRON[402]: (pi) CMD (/usr/local/bin/python3.9 /home/pi/push_bullet/push_bullet_socket.py >> /var/log/push_bullet_socket.py.log 2>&1)
与大多数其他运行时一样,Python 会在标准输出未写入终端时对其进行缓冲。(直到 3.8 这也适用于 stderr。)您的写入被缓冲,直到它们累积 8 kB,或者直到您调用
sys.stdout.flush()
orprint(..., flush=True)
。在 3.9 中,您可以选择更改缓冲模式(行缓冲是您通常在终端上获得的):