cron 任务静默失败的根因,90% 是环境变了
跑了快两年定时任务,发现一个规律:脚本挂掉从来不挑你方便的时候。
凌晨三点,悄无声息,没有异常,没有日志,就是没跑。
排查下来根因集中在三类:
1. 环境变了 —— macOS 升级挪了工具路径、Python 依赖自动更新了 breaking change
2. 上游变了 —— API 返回格式改了、接口下线了、限流阈值调低了
3. 权限变了 —— token 过期、cookie 失效、文件权限被重置
对策也三板斧:
- 启动前做环境预检,依赖不存在直接 exit 1 + 告警
- 动态字段显式提取文本,禁止 str() 转 dict
- 状态文件落盘,下次跑能感知上次是否正常结束
说白了,写脚本 30 分钟,让它不死要折腾 3 小时。但这 3 小时值。