在 Debian(以及其它使用 systemd 的 Linux 发行版)里,“定时器”通常指 systemd timer(.timer + .service)。下面从排查思路 → 常用命令 → 常见错误 → 示例逐步说明。
Debian 常见定时器有两种:
如果是 crontab -e 配置的,请直接看最后一部分。
systemctl list-timers
只看某个定时器:
systemctl list-timers mytimer.timer
检查状态:
systemctl status mytimer.timer
如果没有启用:
systemctl enable --now mytimer.timer
systemctl list-timers --all
关注字段:
NEXT:下一次执行时间LAST:上一次执行时间LEFT:还有多久执行如果 NEXT 是 n/a,说明定时器没生效。
定时器本身不会直接运行命令,而是启动一个 .service。
systemctl status mytimer.service
看:
ActiveResultjournalctl -u mytimer.timer
journalctl -u mytimer.service
实时查看:
journalctl -u mytimer.service -f
如果什么都没有:
systemctl start mytimer.service
如果这样能跑,但定时器不跑:
OnCalendar 格式不对.timer 没写 WantedBy.timer 文件通常要有:
[Install]
WantedBy=timers.target
否则 enable 无效。
.service 没有 [Install] 或 Type最小 service 示例:
[Unit]
Description=My Timer Job
[Service]
Type=oneshot
ExecStart=/usr/local/bin/myscript.sh
chmod +x /usr/local/bin/myscript.sh
并且第一行要有:
#!/bin/bash
systemd 不会读取:
.bashrc✅ 正确方式:
[Service]
Environment=PATH=/usr/local/bin:/usr/bin:/bin
或在脚本里写绝对路径。
❌ 错误:
OnCalendar=daily
✅ 正确:
OnCalendar=*-*-* 03:00:00
或:
OnCalendar=daily
(daily 是合法的,但要确认 systemd 版本)
timedatectl
如果时区不对:
timedatectl set-timezone Asia/Shanghai
/etc/systemd/system/backup.timer[Unit]
Description=Daily Backup Timer
[Timer]
OnCalendar=*-*-* 02:30:00
Persistent=true
[Install]
WantedBy=timers.target
/etc/systemd/system/backup.service[Unit]
Description=Backup Service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
systemctl daemon-reload
systemctl enable --now backup.timer
查看:
crontab -l
日志(Debian):
grep CRON /var/log/syslog
常见错误:
systemctl status xxx.timerjournalctl -u xxx.servicestart service 能否成功enable如果你愿意,可以把你的 .timer + .service 文件内容或具体报错日志贴出来,我可以帮你逐行排错。