温馨提示×

为什么linux trigger失效

小樊
35
2026-09-08 16:24:40
栏目: 智能运维

“Linux trigger 失效”这个说法比较笼统,因为 trigger 在不同场景里含义完全不同。下面按常见场景给你梳理一下原因和排查思路,你可以对号入座。


一、systemd 中的 trigger(最常见)

1️⃣ systemd 单元 trigger 没生效

比如你改了 .service.mount.path 等,但没重新加载。

原因

  • 修改配置后没执行:
    systemctl daemon-reload
    
  • trigger 依赖的 unit 没启用
  • 条件不满足(Condition* / Assert*

排查

systemctl status xxx
journalctl -u xxx
systemctl show xxx | grep -i trigger

二、udev 中的 trigger(设备事件)

2️⃣ udevadm trigger 没反应

udevadm trigger

常见原因

  • 规则写错路径或条件
  • 规则未放在 /etc/udev/rules.d/
  • udev 未重启
  • 内核未产生对应 uevent

排查

udevadm monitor
udevadm test /sys/class/xxx

三、inotify / fsnotify trigger 失效

3️⃣ 文件变化但 trigger 不触发

例如 inotifywait / systemd.path

原因

  • 监听目录不存在
  • 文件系统不支持 inotify(NFS、某些网络盘)
  • 事件被合并(如快速写操作)
  • max_user_watches 超限

排查

cat /proc/sys/fs/inotify/max_user_watches

四、数据库 trigger(MySQL / PostgreSQL)

4️⃣ 数据库 trigger 不执行

原因

  • CREATE TRIGGER
  • 存储过程有错误
  • 使用 INSERT IGNORE / REPLACE 跳过
  • 引擎不支持(如 MyISAM)

排查

SHOW TRIGGERS;

五、内核 / 硬件 trigger

5️⃣ 中断或 GPIO trigger 不触发

  • 设备树配置错误
  • 中断未注册
  • 权限问题(/sys/class/gpio

六、最常见的“坑”总结 ✅

90% 的 trigger 失效是因为:

  1. 改了配置没 reload
  2. 条件不满足(condition / path 不存在)
  3. 日志没看
  4. 作用对象搞错(服务 vs 事件)

如果你能告诉我:

  • 你用的是 哪种 trigger(systemd / udev / 数据库 / 脚本)
  • 具体命令或配置文件

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

0