温馨提示×

ubuntu定时器为何失效了

小樊
50
2026-10-01 04:16:05
栏目: 智能运维

Ubuntu 下“定时器失效”通常不是单一原因,而是 cron / systemd timer / 权限 / 环境 这几类问题之一。下面按最常见情况帮你排查。


一、如果你用的是 cron(最常见)

1️⃣ cron 服务没运行

systemctl status cron

如果没运行:

sudo systemctl start cron
sudo systemctl enable cron

2️⃣ 用户 cron 写错位置

  • 用户级:
crontab -e
  • 系统级:
/etc/crontab

⚠️ /etc/crontab 里必须写用户名:

* * * * * root /path/script.sh

3️⃣ 脚本没有执行权限

chmod +x /path/script.sh

4️⃣ 路径问题(90% 的坑)

cron 的环境变量很少:

PATH=/usr/bin:/bin

✅ 脚本里用绝对路径:

/usr/bin/python3 /home/user/a.py

而不是:

python3 a.py

5️⃣ 输出没地方去,直接“看起来没执行”

cron 默认把输出邮件发给你,但很多系统没配 mail。

✅ 建议加日志:

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

6️⃣ 时间写错

例子:

0 0 * * *   # 每天 0 点
*/5 * * * * # 每 5 分钟

⚠️ Ubuntu 默认是 本地时间,不是 UTC(除非你改过)


二、如果你用的是 systemd timer

1️⃣ timer 没启用

systemctl list-timers
systemctl status mytimer.timer

启用:

systemctl enable --now mytimer.timer

2️⃣ service 没跑成功

timer 只是“触发”,真正执行的是 .service

查看:

journalctl -u myservice.service

3️⃣ OnCalendar 写错

例如:

OnCalendar=*-*-* 02:00:00

三、Ubuntu 特殊坑

1️⃣ 电源休眠 / 关机

  • cron 不会补跑
  • 睡眠时 timer 可能不触发

2️⃣ WSL(Windows Subsystem for Linux)

⚠️ WSL 默认 cron 不自动启动

sudo service cron start

3️⃣ 磁盘满了 / inode 满

df -h
df -i

四、快速自查清单 ✅

你可以照着查:

# 1. 服务在不在
systemctl status cron

# 2. 有没有执行记录
grep CRON /var/log/syslog

# 3. 脚本能否手动跑
bash /path/script.sh

# 4. 有没有日志
cat /tmp/cron.log

如果你愿意,可以把下面信息发我,我可以直接帮你定位:

  1. 用的是 cron 还是 systemd timer
  2. 定时器配置内容
  3. 脚本内容(脱敏)
  4. Ubuntu 版本
  5. 是否 WSL / 服务器 / 笔记本

我可以直接告诉你“为什么没跑”。

0 踩