Debian 的 crontab 不执行,常见原因可以归纳为以下几类。你可以逐条排查。
systemctl status cron
或(老版本):
service cron status
systemctl start cron
systemctl enable cron
✅ 注意:Debian 的服务名是 cron,不是 cronie 或 crond(那是 CentOS/RHEL)。
crontab -l
crontab -e
❌ 不要直接改 /etc/crontab(那是系统级,格式不同)
/etc/crontab 需要指定用户:
* * * * * root /path/script.sh
cron 的环境极其精简:
PATH❌ 错误:
* * * * * backup.sh
✅ 正确:
* * * * * /usr/local/bin/backup.sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
#!/bin/bash
source /etc/profile
chmod +x /path/script.sh
/etc/cron.deny 禁止检查:
cat /etc/cron.deny
cat /etc/cron.allow
sudo nano /etc/rsyslog.conf
取消注释:
cron.* /var/log/cron.log
然后:
systemctl restart rsyslog
查看日志:
tail -f /var/log/cron.log
cron 会把输出邮件给你,但很多系统没配邮件。
* * * * * /path/script.sh >> /var/log/mycron.log 2>&1
date
timedatectl
如果时区不对,cron 按系统时间跑。
| 问题 | 解决 |
|---|---|
| 服务没开 | systemctl start cron |
| 用相对路径 | 用绝对路径 |
| 没输出日志 | 2>&1 重定向 |
| 脚本手动能跑,cron 不行 | 99% 是环境变量 |
| 写错文件 | 用 crontab -e |
* * * * * /bin/date >> /tmp/crontest.log 2>&1
如果这都不执行,基本就是 cron 服务没跑。
如果你愿意,可以把:
crontab -lsystemctl status cron贴出来,我可以帮你精确定位。