温馨提示×

debian定时器怎么排查错误

小樊
46
2026-10-04 20:09:56
栏目: 智能运维

在 Debian(及大多数 Linux 发行版)里,“定时器”通常指 systemd timer(也可能指 cron)。下面分别说明 如何排查 systemd timer 错误 和 cron 错误。


一、systemd timer 排查(最常见)

1. 查看 timer 状态

systemctl list-timers --all
systemctl status yourtimer.timer

重点看:

  • Loaded:是否加载
  • Active:是否激活
  • Last trigger / Next trigger
  • 是否有 failed

2. 查看 timer 日志

journalctl -u yourtimer.timer
journalctl -u yourservice.service

如果 timer 触发了但没效果,通常问题在 对应的 service。


3. 查看关联 service 是否失败

systemctl status yourservice.service
journalctl -xeu yourservice.service

常见错误:

  • 脚本路径不存在
  • 权限不足
  • 环境变量缺失(systemd 环境很干净)
  • 使用了交互命令(如 read)

4. 手动运行 service 测试

systemctl start yourservice.service

如果手动能跑、timer 不跑,通常是:

  • OnCalendar 写错
  • timer 未 enable
  • 系统休眠 / 关机错过触发

5. 校验 timer 配置

systemd-analyze verify /etc/systemd/system/yourtimer.timer

6. 常见错误示例

[Timer]
OnCalendar=daily

❌ 没写 Persistent=yes,错过时间不补跑

✅ 推荐:

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
Unit=myservice.service

二、cron 定时任务排查

1. 查看 cron 日志

Debian 默认可能没开 cron 日志:

grep cron /var/log/syslog

如果没有:

sudo apt install rsyslog
sudo systemctl restart rsyslog

2. 检查 cron 是否运行

systemctl status cron

3. 手动执行 cron 命令

/bin/bash /path/script.sh

cron 环境:

  • 无 PATH
  • 无用户环境变量
  • 建议脚本写绝对路径

4. cron 调试技巧

在 crontab 里:

* * * * * /bin/bash /script.sh >> /tmp/cron.log 2>&1

三、快速定位思路总结

✅ timer 不执行:

  1. systemctl status xxx.timer
  2. journalctl -u xxx.service
  3. 手动 start service
  4. 检查路径 / 权限 / 环境

✅ cron 不执行:

  1. 看 /var/log/syslog
  2. 手动跑脚本
  3. 加日志重定向
  4. 用绝对路径

如果你愿意,可以把:

  • timer / service 文件
  • 或 crontab 内容
  • 或具体报错日志

贴出来,我可以直接帮你定位问题。

0 踩