同一个脚本在终端跑正常,放进 crontab 后没有任何输出,日志文件一直是空的。日志里能对上时间点,这种反而好排。
cron 的环境极简,PATH 里没有虚拟环境的解释器,工作目录也不是脚本所在目录,相对路径全部失效。这一点先确认清楚,后面就不用反复试。
# crontab -e SHELL=/bin/bash PATH=/data/venv/bin:/usr/bin:/bin 0 2 * * * cd /data/job && python run.py >> job.log 2>&1
「Python 定时任务」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。
改完顺手把文档补一句,省得下次自己重新推一遍。监控和日志的时间要对上,时区不一致会多绕很大一圈。
临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
处理上按这个顺序:crontab 里写解释器和脚本的绝对路径;在命令开头先切到脚本所在目录,再执行脚本;把标准输出和标准错误一起重定向进同一个日志。
结果对不对很好判断,日志文件里有完整输出,改成下一分钟手动触发也能跑完。
