Ubuntu 下“定时器不触发”通常指 cron / systemd timer / at 等没按预期执行。下面按常见原因逐一排查(最常见的是 cron)。
一、如果是 cron 没触发
1️⃣ 服务没运行
systemctl status cron
或(老版本)
service cron status
如果没运行:
sudo systemctl start cron
sudo systemctl enable cron
2️⃣ 时间/时区问题
date
timedatectl
如果时区不对,cron 会按系统时间执行。
3️⃣ 用户 cron 写错
crontab -l
常见错误:
- 写成了
0 2 * * * command(少了用户) - 路径没写绝对路径
- 没加换行(最后一行必须空行)
✅ 推荐写法:
0 2 * * * /usr/bin/python3 /home/user/test.py >> /tmp/cron.log 2>&1
4️⃣ 环境变量问题(非常常见)
cron 的环境很少:
PATH=/usr/bin:/bin
解决:
- 脚本里写绝对路径
- 或在 crontab 顶部加:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
5️⃣ 权限问题
- 脚本没执行权限
chmod +x script.sh
- 用户在
/etc/cron.deny
6️⃣ 日志排查
grep CRON /var/log/syslog
或
journalctl -u cron
二、如果是 systemd timer 不触发
1️⃣ timer 没 enable
systemctl list-timers
systemctl status mytimer.timer
启用:
systemctl enable --now mytimer.timer
2️⃣ OnCalendar 写错
示例:
[Timer]
OnCalendar=*-*-* 02:00:00
检查:
systemd-analyze calendar "*-*-* 02:00:00"
3️⃣ 服务本身失败
systemctl status mytask.service
journalctl -u mytask.service
三、如果是 at 不触发
systemctl status atd
atq
没运行:
sudo systemctl start atd
四、快速自检清单 ✅
- [ ] 服务在运行
- [ ] 用的是绝对路径
- [ ] 有日志输出
- [ ] 时间/时区正确
- [ ] 脚本可执行
如果你愿意,可以把:
- 用的定时器类型(cron / systemd)
- 配置内容
- 日志输出
贴出来,我可以直接帮你定位。