调试 Cron 定时任务是运维和开发中常见的问题。Cron 任务“看起来没执行”通常有多个原因。下面从常见失败原因 → 调试方法 → 实用技巧系统地讲一下。
# Linux
ps aux | grep cron
# 或
systemctl status cron
# (CentOS/RHEL 可能是 crond)
systemctl status crond
如果没运行:
sudo systemctl start cron
sudo systemctl enable cron
常见错误:
0 0 * * * 但服务器时区不对验证工具:
# 查看当前用户 cron
crontab -l
# 查看系统级
cat /etc/crontab
ls /etc/cron.d/
这是 90% 调试失败的原因。
Cron 默认环境:
PATH 非常小(通常是 /usr/bin:/bin)~/.bashrc* * * * * python script.py
* * * * * /usr/bin/python3 /home/user/script.py >> /home/user/cron.log 2>&1
✅ 建议:
PATHPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
* * * * * /path/to/cmd >> /tmp/cron.log 2>&1
然后:
tail -f /tmp/cron.log
如果没有输出,说明:
Cron 不是你的终端,要“像 Cron 一样跑”:
env -i /bin/bash -c '/path/to/script.sh'
或者:
/bin/sh -c '/home/user/script.sh'
chmod +x script.sh
sudo 才需要的资源grep CRON /var/log/syslog
grep CRON /var/log/cron
能看到:
| 问题 | 原因 |
|---|---|
| 手动能跑,cron 不能 | 环境变量 |
| 没任何日志 | 没重定向 |
| 时间不对 | 时区 |
| 偶尔失败 | 资源路径 |
| 权限拒绝 | 用户不对 |
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
*/5 * * * * /usr/bin/python3 /home/user/job.py >> /home/user/job.log 2>&1
如果你愿意,可以:
我可以直接帮你定位问题。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。