在 Debian(以及大多数 Linux 发行版)里,“定时器”通常指 systemd timer(也可能是 cron)。下面分别说明如何调试 systemd 定时器和cron 定时器,并给出常用排查方法。
systemctl list-timers
systemctl list-timers --all
查看某个定时器:
systemctl status mytimer.timer
systemctl status mytimer.service
sudo systemctl start mytimer.timer
sudo systemctl start mytimer.service
手动触发服务(不依赖时间):
sudo systemctl start mytimer.service
journalctl -u mytimer.service
journalctl -u mytimer.timer
实时查看:
journalctl -u mytimer.service -f
查看某次执行:
journalctl -u mytimer.service --since "10 min ago"
systemctl is-enabled mytimer.timer
systemctl is-active mytimer.timer
如果未启用:
sudo systemctl enable --now mytimer.timer
journalctl -u mytimer.serviceExecStart= 必须是绝对路径timedatectl
确保系统时间正确。
测试日历表达式:
systemd-analyze calendar "daily"
systemd-analyze calendar "*-*-* 03:00:00"
/etc/systemd/system/mytimer.service
[Unit]
Description=My Task
[Service]
Type=oneshot
ExecStart=/usr/local/bin/myscript.sh
/etc/systemd/system/mytimer.timer
[Unit]
Description=Run my task daily
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
然后:
sudo systemctl daemon-reload
sudo systemctl enable --now mytimer.timer
sudo journalctl -u cron
或
grep CRON /var/log/syslog
/bin/bash /path/to/script.sh
crontab -l
示例:
0 3 * * * /usr/local/bin/backup.sh >> /tmp/cron.log 2>&1
✅ 用 journalctl 看真实错误
✅ 手动运行 service / script
✅ systemd-analyze calendar 验证时间
✅ 加日志输出(>> /tmp/log 2>&1)
如果你愿意,可以贴出你的 timer / service 文件或 cron 配置,我可以直接帮你找问题。