温馨提示×

ubuntu定时器为何不触发

小樊
49
2026-10-12 20:31:37
栏目: 智能运维

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)
  • 配置内容
  • 日志输出

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

0 踩