这个坑值得记一笔。脚本在当前用户下执行完全正常,写进定时任务后从来不跑,日志里也没有任何输出,像是被完全忽略。

这类报错背后常见的原因有几处,逐个排除就行。定时任务的环境变量和登录会话不同,可执行路径缺失;脚本里用了相对路径,工作目录不是预期位置;定时服务没启动,或者当前用户没有权限。

先确认定时服务状态

systemctl status crond

再往下看任务执行日志

journalctl -u crond -n 50

随后在任务里显式设置环境变量

PATH=/usr/local/bin:/usr/bin:/bin

等前面都确认过,再用绝对路径并重定向输出

0 3 * * * /bin/bash /opt/job.sh >> /var/log/job.log 2>&1

同事提醒我看一下最近一次发布,时间点确实对得上。

怎么算真的好了,看的是同一批现象。任务按点执行,日志文件里能看到输出,业务数据按预期生成。

容易忽略的是,定时任务的路径极短,java、python 这类命令必须写绝对路径;先加一条打印环境变量的测试任务最快。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189