温馨提示×

为什么linux trigger失败

小樊
40
2026-10-08 14:01:41
栏目: 智能运维

“Linux trigger 失败”这个说法比较笼统,因为 trigger 在 Linux 里可以指很多东西。下面我按常见场景给你梳理一下,你可以对照看看是哪种情况。


一、systemd 中的 trigger 失败

常见于:

systemctl trigger xxx

或 unit 文件里:

[Unit]
Triggers=xxx.service

常见原因

  1. 目标 unit 不存在或名字写错
    systemctl list-units --all | grep xxx
    
  2. 依赖条件不满足
    • ConditionPathExists=
    • ConditionFileIsExecutable=
    • After=/Requires= 没满足
  3. trigger 的不是 service,而是 path/socket/timer
    • path trigger 需要文件变化
    • socket trigger 需要连接进来
  4. 权限问题
    • 非 root 用户 trigger 系统服务

✅ 排查:

journalctl -u xxx.service
systemctl status xxx.service

二、udev 规则 trigger 失败

udevadm trigger

常见原因

  1. 规则写错
    udevadm control --reload
    udevadm test /sys/class/xxx
    
  2. ATTR 不匹配
    • 实际设备和规则不一致
  3. 脚本无执行权限
    chmod +x /path/to/script
    
  4. 在容器里运行(不支持 udev)

三、Git / CI 中的 trigger 失败(Linux runner)

比如 GitLab / GitHub Actions:

trigger:
  - main

常见原因

  1. 分支名不匹配
  2. YAML 缩进错误
  3. runner 没注册或离线
  4. 权限不足(protected branch)

四、内核 / 硬件 trigger(如 IRQ、GPIO)

echo 1 > /sys/class/gpio/gpioX/value

常见原因

  1. 没有 export GPIO
  2. 用户无写权限
  3. 内核未启用相关驱动

五、你没说清楚时的通用排查思路

请补充:

  • 你用的是哪种 trigger?(systemd / udev / git / 自定义)
  • 完整命令或配置
  • 报错信息(最重要)

如果你愿意,把具体命令 + 报错日志贴出来,我可以直接帮你定位是哪一步失败的。

0 踩