温馨提示×

为什么debian定时器不执行

小樊
52
2026-09-07 21:30:12
栏目: 智能运维

Debian 下“定时器不执行”通常指 systemd timer(或 cron)没有按预期触发。下面按最常见原因系统梳理,并给出排查步骤。


一、如果你用的是 systemd timer(最常见)

1. timer 本身没启用

systemctl list-timers

看不到你的 timer,说明没启用:

systemctl enable --now yourtimer.timer

2. 只启用了 service,没启用 timer

很多人只做了:

systemctl enable yourtask.service

但 service 不会自动跑,必须启用 .timer:

systemctl enable yourtask.timer

3. timer 已触发,但 service 失败了

查看是否执行过:

systemctl list-timers --all
journalctl -u yourtask.service
journalctl -u yourtask.timer

常见失败原因:

  • 脚本路径不对
  • 没有执行权限
  • 环境变量不完整(systemd 环境很干净)
  • 用了 User= 但权限不足

4. OnCalendar 写错

示例(每天 3 点):

[Timer]
OnCalendar=*-*-* 03:00:00

错误写法如:

OnCalendar=daily 3:00   # 错误

检查语法:

systemd-analyze verify yourtimer.timer

5. 系统时间不对

timedatectl

如果时间错误,timer 不会触发。


二、如果你用的是 cron

1. cron 服务没运行

systemctl status cron

没运行就:

systemctl enable --now cron

2. 用户 cron 写错

crontab -l

注意:

  • 路径要用绝对路径
  • 输出要重定向,否则可能被吞

示例:

0 3 * * * /usr/bin/bash /home/user/backup.sh >> /tmp/cron.log 2>&1

3. 权限或 PATH 问题

cron 的 PATH 很小:

PATH=/usr/bin:/bin

三、快速自查清单 ✅

  • [ ] systemctl enable --now xxx.timer
  • [ ] systemctl list-timers 能看到
  • [ ] journalctl -u xxx.service 无报错
  • [ ] 脚本有执行权限
  • [ ] 使用了绝对路径
  • [ ] 系统时间正确

如果你愿意,可以把:

  • timer / service 文件内容
  • 或 crontab 内容

贴出来,我可以直接帮你指出问题在哪。

0 踩