温馨提示×

debian定时器为何不执行

小樊
36
2026-09-04 23:13:49
栏目: 智能运维

Debian 下“定时器不执行”通常指的是 systemd timer(而不是 cron)不生效。下面按最常见原因 → 排查步骤给你一个清单,你可以逐条对照。


一、最常见原因(80% 问题在这里)

1️⃣ timer 没有 enable

systemctl list-timers

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

systemctl enable your.timer
systemctl start your.timer

✅ 只 startenable,重启后就不再执行。


2️⃣ 对应的 service 没写对

timer 只是“触发器”,真正执行的是 service

❌ 错误示例:

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

但 service 不存在或名字不对:

your.service 不存在

✅ 正确关系:

your.timer  →  triggers  →  your.service

检查:

systemctl status your.service

3️⃣ service 里缺少 [Install] 或 Type

service 示例(必须):

[Unit]
Description=My Job

[Service]
Type=oneshot
ExecStart=/usr/local/bin/myscript.sh

[Install]
WantedBy=multi-user.target

❌ 常见错误:

  • Type 没写
  • ExecStart 路径错
  • 脚本没有执行权限

4️⃣ 脚本权限问题(非常常见)

ls -l /usr/local/bin/myscript.sh

必须:

chmod +x /usr/local/bin/myscript.sh

并且脚本要有:

#!/bin/bash

二、时间 / 时区问题

5️⃣ 时区不对

timedatectl

如果时区不是你预期的:

timedatectl set-timezone Asia/Shanghai

⚠️ systemd timer 用的是系统时间


6️⃣ OnCalendar 格式错误

错误示例:

OnCalendar=every day 3:00

✅ 正确:

OnCalendar=*-*-* 03:00:00

查看下次执行时间:

systemctl list-timers --all

三、日志查看(关键)

7️⃣ 看 timer 是否被触发

journalctl -u your.timer

8️⃣ 看 service 是否执行失败

journalctl -u your.service

四、cron 混淆情况(如果你用的是 cron)

如果你是 cron 不执行

systemctl status cron

检查:

  • 用户 cron:crontab -l
  • 脚本路径用绝对路径
  • 环境变量问题(cron 环境很小)

五、快速自检清单 ✅

systemctl enable your.timer
systemctl start your.timer
systemctl status your.timer
systemctl status your.service
journalctl -u your.service
ls -l /path/to/script.sh

如果你愿意,可以把下面内容贴出来,我可以直接帮你改:

  • .timer 文件
  • .service 文件
  • 脚本路径和权限
  • journalctl 报错信息

我可以直接告诉你哪一行有问题

0