温馨提示×

linux trigger为何不执行

小樊
39
2026-10-23 05:35:08
栏目: 智能运维

在 Linux 里,trigger 不执行通常出现在 systemd 定时器(timer)、udev 规则、systemd 单元之间的触发,或者自定义 trigger 脚本这几类场景中。下面按常见原因给你一个排查清单。


一、如果是 systemd timer 的 trigger 没执行

1️⃣ timer 是否启用并启动

systemctl list-timers
systemctl status xxx.timer

如果没有启动:

systemctl enable xxx.timer
systemctl start xxx.timer

2️⃣ service 是否存在 / 是否能手动执行

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

systemctl start xxx.service

手动能跑,timer 才可能有用。

3️⃣ OnCalendar / OnBootSec 写错

示例:

[Timer]
OnCalendar=*-*-* 03:00:00

错误写法会导致 timer 永远不触发。

查看下次触发时间:

systemctl list-timers --all

4️⃣ 被 Persistent=false 影响

如果系统关机错过时间:

Persistent=true

否则不会补执行。


二、如果是 udev 的 trigger 不执行

1️⃣ udev 规则语法错误

udevadm control --reload
udevadm trigger

2️⃣ 规则没匹配

调试:

udevadm monitor

插设备看是否触发。

3️⃣ RUN 权限问题

udev 中:

RUN+="/usr/local/bin/script.sh"

必须:

  • 绝对路径
  • 可执行
  • 不要用 sudo

三、如果是 systemd 单元之间的 trigger

例如:

[Unit]
Triggers=xxx.service

注意:

  • 只在某些版本支持
  • 更推荐用 Wants= / After=

四、如果是自定义 trigger 脚本

常见原因:

  • 脚本没 +x
  • 解释器路径错误(#!/bin/bash)
  • PATH 问题
  • 在 cron / timer 中无环境变量

测试:

bash -x your_trigger.sh

五、快速自检清单 ✅

✅ 是否 enable + start
✅ 手动能否执行
✅ 日志是否有报错

journalctl -u xxx.service
journalctl -u xxx.timer

✅ 路径 / 权限是否正确


如果你能告诉我:

  • 你用的是 timer / udev / cron / 其他
  • 相关配置文件内容

我可以直接帮你定位问题。

0 踩