温馨提示×

ubuntu定时器如何排查错误

小樊
42
2026-10-01 04:18:05
栏目: 智能运维

在 Ubuntu 里“定时器”通常有两种常见场景:

  1. systemd 定时器(systemd timer) —— 推荐、服务器常用
  2. cron / crontab 定时任务 —— 传统方式

下面分别说明如何排查错误。


一、systemd 定时器排查

1. 查看定时器状态

systemctl list-timers
systemctl status your-timer.timer

重点看:

  • Active: 是否正常
  • Last trigger / Next trigger
  • 是否有 failed

2. 查看定时器对应的 service 状态

systemctl status your-timer.service

⚠️ 定时器只是“触发器”,真正执行的是 .service

3. 查看日志(非常重要)

journalctl -u your-timer.service
journalctl -u your-timer.timer

查看最近日志:

journalctl -u your-timer.service -n 50 --no-pager

实时查看:

journalctl -u your-timer.service -f

4. 常见错误原因

  • .service 里 ExecStart 路径不对
  • 脚本没有执行权限
  • 环境变量缺失(systemd 环境很干净)
  • 用户不对(默认 root)

示例 service:

[Unit]
Description=My Script

[Service]
Type=simple
ExecStart=/opt/myscript.sh

5. 手动测试 service

systemctl start your-timer.service

看是否报错。


二、cron 定时任务排查

1. 查看当前用户的 cron

crontab -l

2. 查看 cron 服务状态

systemctl status cron

3. 查看 cron 日志

Ubuntu 默认可能没开 cron 日志:

sudo vi /etc/rsyslog.d/50-default.conf

取消注释:

cron.*    /var/log/cron.log

然后:

sudo systemctl restart rsyslog

查看日志:

tail -f /var/log/cron.log

4. 常见 cron 错误

  • 路径问题(cron 的 PATH 很少)
  • 没有输出重定向,错误看不到
  • 权限不足

✅ 推荐写法:

* * * * * /bin/bash /home/user/test.sh >> /home/user/cron.log 2>&1

三、通用排查思路(强烈推荐)

1. 手动执行脚本

bash /path/to/script.sh

如果手动都失败,定时任务一定失败。

2. 加日志

在脚本里加:

echo "$(date) run" >> /tmp/debug.log

3. 检查权限

ls -l /path/to/script.sh
chmod +x /path/to/script.sh

四、快速判断你用的是哪种

systemctl list-timers | grep yourname
crontab -l | grep yourname

如果你愿意,可以告诉我:

  • 用的是 systemd timer 还是 cron
  • 报错信息或日志内容

我可以帮你精确定位问题。

0 踩