调试 Cron Job(定时任务)通常需要从 日志、环境、权限、输出 几个角度入手。下面按「常见坑 → 调试方法 → 实战技巧」来说明。
PATH 很短(通常只有 /usr/bin:/bin)USER、没有 HOME、没有 tty❌ 常见错误:
python script.py
✅ 应写成:
/usr/bin/python3 /path/to/script.py
Cron 会把 stdout/stderr 发给 邮件(mail),但很多人没配置。
✅ 显式重定向日志:
* * * * * /path/to/job.sh >> /var/log/myjob.log 2>&1
/etc/cron.allow✅ 检查:
ls -l /path/to/script.sh
chmod +x /path/to/script.sh
/bin/bash /path/to/job.sh
确认脚本本身没问题。
env -i /bin/bash -c '/path/to/job.sh'
或:
env -i PATH=/usr/bin:/bin /bin/bash /path/to/job.sh
journalctl -u cron
# 或
journalctl -u cronie
tail -f /var/log/cron
tail -f /var/log/syslog
* * * * * env > /tmp/cron_env.txt
然后对比手动环境。
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
*/5 * * * * root /usr/bin/python3 /opt/scripts/backup.py >> /var/log/backup.log 2>&1
set -x在脚本开头加:
#!/bin/bash
set -x
cd /path/to/workdir || exit 1
* * * * * echo "cron works" | mail -s "cron test" you@example.com
| 现象 | 原因 |
|---|---|
| 手动能跑,Cron 不行 | 环境变量 |
| 没任何日志 | 输出没重定向 |
| 脚本没执行 | 权限 / PATH |
| 只执行一半 | 早退出 / cd 失败 |
| 时间不对 | 时区问题 |
你可以贴出:
我可以直接帮你定位问题。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。