温馨提示×

为何debian crontab不执行

小樊
60
2026-10-02 07:35:45
栏目: 智能运维

Debian 的 crontab 不执行,常见原因可以归纳为以下几类。你可以逐条排查。


一、服务本身没运行(最常见)

1. 检查 cron 服务状态

systemctl status cron

或(老版本):

service cron status

2. 如果没运行,启动它

systemctl start cron
systemctl enable cron

✅ 注意:Debian 的服务名是 cron,不是 cronie 或 crond(那是 CentOS/RHEL)。


二、crontab 写错位置或用户不对

1. 查看当前用户的 crontab

crontab -l

2. 编辑 crontab(必须用这个命令)

crontab -e

❌ 不要直接改 /etc/crontab(那是系统级,格式不同)

3. 系统级 crontab 格式不同

/etc/crontab 需要指定用户:

* * * * * root /path/script.sh

三、环境变量问题(非常常见)

cron 的环境极其精简:

  • 没有 PATH
  • 没有用户 shell 环境

1. 脚本里用绝对路径

❌ 错误:

* * * * * backup.sh

✅ 正确:

* * * * * /usr/local/bin/backup.sh

2. 在 crontab 里设置 PATH

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

3. 脚本里手动 source 环境

#!/bin/bash
source /etc/profile

四、权限问题

1. 脚本没有执行权限

chmod +x /path/script.sh

2. 被 /etc/cron.deny 禁止

检查:

cat /etc/cron.deny
cat /etc/cron.allow

五、日志看不到?先开日志

Debian 默认可能不记录 cron 日志

修改 rsyslog

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 -l
  • 脚本内容
  • systemctl status cron

贴出来,我可以帮你精确定位。

0 踩