Cron定时任务执行异常求助
Cron定时任务执行异常求助
兄弟,我来帮你排查这个问题!你的cron任务没生成日志,核心是两个容易踩的坑:
问题根源
source是Shell内置命令,cron没法直接调用
cron执行任务时,默认用/bin/sh作为执行器,但source是bash(或其他交互式Shell)的内置命令,不是独立的可执行程序,所以cron找不到这个命令,任务直接失败了。- cron的执行环境和你平时登录的Shell不一样
就算绕开source的问题,cron的环境变量、工作目录都比登录Shell精简很多,但你的情况里主要是第一个问题导致的。
解决办法(推荐第一种)
办法1:直接用bash执行脚本(最简洁通用)
把你的cron行改成这样:
0 0 * * * /bin/bash /home/myname/cronsh.sh
然后记得给脚本加可执行权限:
chmod +x /home/myname/cronsh.sh
这样cron会直接调用bash来运行你的脚本,完全不需要用source,脚本里的date命令就能正常写入日志了。
办法2:如果一定要用source(比如脚本里要加载环境变量)
要是你的脚本里有需要加载的环境变量,必须用source的话,得让cron先启动bash再执行命令:
0 0 * * * /bin/bash -c 'source /home/myname/cronsh.sh'
不过你的场景里只是写date,第一种办法足够了。
额外排查小技巧
- 可以给cron任务加错误日志输出,方便下次排查:
0 0 * * * /bin/bash /home/myname/cronsh.sh >> /home/myname/cronlog.txt 2>&1
这样不仅会记录正常输出,连错误信息也会写到日志里,能快速定位问题。
- 查看系统的cron日志,比如
/var/log/cron(不同Linux发行版路径可能有差异),里面会详细记录任务是否执行、有没有报错。
备注:内容来源于stack exchange,提问作者SO_32
相关产品推荐
相关产品推荐

