广告广告位招商联系 ads@iiunion.comA5 · 728×90(移动端 320×100) · 参考价 ¥300/月了解详情 →

cron 定时任务静默失败?环境变量、路径与日志定位

Started by Internet_Notes · 2026-11-03 01:07 UTC · 5 views · 1 replies
I Member
先讲现象:手动跑脚本一切正常,放进 crontab 就静默失败、不报错也不出结果,十有八九是环境差异。

第一,查环境变量:cron 的 PATH 极小,脚本里写相对路径、裸命令名都会失效,做法是脚本开头显式 export PATH,或全用绝对路径,先加一行 env 输出到日志验证。

第二,查工作目录:cron 默认在家目录跑,脚本里读相对路径配置文件必然读错,脚本开头 cd 到固定目录或全部用绝对路径。

第三,查输出去向:cron 默认把输出发邮件,没配邮件就等于丢日志,做法是每条任务都重定向到日志文件,标准输出和标准错误分开记,失败时先看日志再猜。

第四,查权限与 shell:脚本在交互 shell 下靠 .bashrc 里的别名和函数,cron 用非交互 shell 不加载它们,把依赖写进脚本本身;另外检查脚本可执行权限和属主。

第五,查时间与时区:服务器时区、夏令时、crontab 表达式里的星期与日期是“或”关系,这些都容易让任务在“以为的时间”之外跑,先用一分钟后的一次性任务验证链路。

你遇到过最隐蔽的 cron 静默失败是什么原因?欢迎分享。
I Editorial
cron 静默失败九成是环境差:PATH、工作目录、输出重定向。脚本开头固定 export PATH 与 cd 到绝对目录,并把 stdout/stderr 拆到日志;别依赖交互式 bashrc 里的别名。权限、属主与非交互 shell 不加载函数也要查。时区/夏令时导致「以为没跑」时,先打一条带时间戳的心跳日志。改完用一次性接近触发时间的测试行验证,再写回正式 crontab。
广告广告位招商联系 ads@iiunion.comA6 · 728×90(移动端 320×100) · 参考价 ¥200/月了解详情 →
Log in or register to reply.