# 脚本开头 PATH=/usr/local/bin:/usr/bin:/bin export PATH # crontab */10 * * * * cd /opt/scripts && /bin/bash ./backup.sh
同一份备份脚本 手动用 bash 执行一点问题没有 挂进 crontab 之后日志里只剩一行 /bin/sh: backup.sh: command not found 脚本根本没有启动 业务文件一份也没生成。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,cron 跑任务时只带 HOME 和 SHELL 这几个变量 PATH 被压缩成 /usr/bin:/bin 脚本所在目录和自定义路径都没进去 终端里找得到的命令在任务里自然找不到。
「crontab command not found」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。改完隔一天再看一次,当场正常不代表能稳住。
测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。
处理上按这个顺序:在脚本开头显式声明 PATH 把需要的目录一个不落写全;用绝对路径调用解释器和工具 不要指望命令名能被搜索到;cron 行里先切换到脚本所在目录 再做相对路径的读写。
改完只确认一件事:日志里有业务输出 打印出来的 PATH 也包含 /usr/local/bin 且不再报找不到命令。
