You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 18.04下Crontab执行Shell脚本提示command not found问题排查

问题描述

在Ubuntu 18.04系统中配置Crontab定时任务后,任务无法运行。调试时直接在终端执行以下命令出现错误:

root@ip-171-31-2-1:/home/ubuntu/scripts# * * * * * /bin/echo "cron works" >> /tmp/file
db_backup.sh: command not found

当前Crontab内容为:

*/20 * * * * sh /home/ubuntu/scripts/db_backup.sh >> /tmp/backup.txt
*/30 * * * * sh /home/ubuntu/scripts/db_sync.sh >> /tmp/sync.log

已确认脚本在Crontab外可正常运行,且已通过chmod +x给两个文件添加执行权限。

排查与解决方法
  • 修正错误的调试方式
    直接在终端输入Cron表达式是错误操作:shell会把*解析为当前目录下的所有文件,进而尝试执行第一个匹配到的db_backup.sh,这才出现了db_backup.sh: command not found的误导性报错。正确调试方式是将测试命令加入Crontab,或者查看Cron系统日志/var/log/syslog。

  • 补全错误输出重定向
    当前Crontab仅记录标准输出,未捕获错误信息,导致无法定位任务失败的真实原因。修改Crontab内容,将错误输出也写入日志:

    */20 * * * * sh /home/ubuntu/scripts/db_backup.sh >> /tmp/backup.txt 2>&1
    */30 * * * * sh /home/ubuntu/scripts/db_sync.sh >> /tmp/sync.log 2>&1
    

    之后查看对应日志文件,即可获取具体执行错误。

  • 处理Cron环境变量差异
    Cron的运行环境与用户终端环境差异极大,未指定绝对路径的命令可能无法被识别:

    • 方案一:在脚本中给所有命令添加绝对路径(例如用/usr/bin/mysqldump代替mysqldump)
    • 方案二:在Crontab开头添加完整的PATH环境变量:
      PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
      */20 * * * * sh /home/ubuntu/scripts/db_backup.sh >> /tmp/backup.txt 2>&1
      */30 * * * * sh /home/ubuntu/scripts/db_sync.sh >> /tmp/sync.log 2>&1
      
    • 方案三:因已给脚本添加执行权限,可直接调用脚本路径,无需额外加sh:
      */20 * * * * /home/ubuntu/scripts/db_backup.sh >> /tmp/backup.txt 2>&1
      
  • 确认Cron服务状态
    检查Cron服务是否正常运行:

    sudo systemctl status cron
    

    若服务未启动,执行以下命令启动并设置开机自启:

    sudo systemctl start cron
    sudo systemctl enable cron
    

内容的提问来源于stack exchange,提问作者Kevin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 17:25:27