温馨提示×

为什么debian定时器失效

小樊
49
2026-10-04 20:06:56
栏目: 智能运维

Debian 下“定时器失效”通常不是系统 bug,而是配置、权限或服务状态问题。下面按最常见原因给你一个排查清单(以 systemd timer 为主,也顺带提 cron)。


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

1️⃣ timer 根本没启用

systemctl list-timers

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

systemctl enable --now your.timer

✅ 只 enable 不 --now,不会立即生效
✅ 只 start 不 enable,重启后失效


2️⃣ .timer 写错(OnCalendar 最常见)

示例正确写法:

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

常见错误:

  • OnCalendar=daily ✅
    但 OnCalendar=every day ❌
  • 时间写错格式(必须是系统区域格式)

检查语法:

systemd-analyze verify your.timer

3️⃣ 对应的 .service 没运行 / 失败

timer 只是“触发器”,真正干活的是 service:

systemctl status your.service
journalctl -u your.service

常见问题:

  • service 里 Type=oneshot 没写
  • 脚本路径不对
  • 权限不足

4️⃣ Persistent 没开,错过时间不补执行

如果机器关机或睡眠:

Persistent=true

否则错过就不再跑。


5️⃣ 时区问题(非常隐蔽)

timedatectl

如果时区不对,定时时间会“看起来失效”。


二、如果你用的是 cron(crontab)

1️⃣ 服务没开

systemctl status cron

Debian 12 默认是 cron 或 cronie


2️⃣ 用户写错

crontab -l        # 当前用户
crontab -u root -l

3️⃣ 环境变量问题(90% cron 失效原因)

cron 环境极小:

PATH=/usr/bin:/bin

❌ 脚本里用 python、source 可能失败
✅ 用绝对路径:

0 3 * * * /usr/bin/python3 /opt/script.py

4️⃣ 日志没开,看不到失败

grep CRON /var/log/syslog

三、快速自检清单(照着做)

# systemd
systemctl status your.timer
systemctl list-timers
journalctl -u your.timer
journalctp -u your.service

# cron
systemctl status cron
grep CRON /var/log/syslog

四、如果你愿意

你可以直接把下面信息贴出来,我能精准判断:

  • 用的是 systemd timer 还是 cron
  • .timer / .service / crontab 内容
  • journalctl 或日志报错

我可以一行一行帮你改 ✅

0 踩