在 Linux 下,“trigger 失效”这个说法比较笼统,可能指 systemd trigger、udev trigger、cron trigger、数据库 trigger、或者应用层 trigger。下面我按最常见场景分别说明原因和排查方法,你可以对照看是哪一类。
服务未 enable
systemctl enable xxx.service
没 enable,trigger 不会自动执行。
trigger 条件不满足
Wants= / Requires= 没配After= / Before= 顺序问题手动触发方式不对
systemctl trigger xxx.service # ❌ 不存在
正确方式:
systemctl start xxx.service
systemctl restart xxx.service
unit 被 mask
systemctl is-enabled xxx.service
如果是 masked,trigger 直接失效。
✅ 排查:
journalctl -u xxx.service
systemctl status xxx.service
规则写错路径
/etc/udev/rules.d/99-xxx.rules规则语法错误
ACTION=="add", SUBSYSTEM=="usb", RUN+="/usr/bin/myscript.sh"
脚本无执行权限
chmod +x /usr/bin/myscript.sh
没重新加载 udev
udevadm control --reload
udevadm trigger
✅ 测试:
udevadm test /sys/class/xxx
cron 服务没开
systemctl status cron
环境变量缺失 cron 默认 PATH 很小,脚本要用绝对路径。
输出无重定向被吞
* * * * * /root/test.sh >> /tmp/cron.log 2>&1
✅ 排查:
grep CRON /var/log/syslog
INSERT ... IGNORELOAD DATA✅ MySQL:
SHOW TRIGGERS;
你可以直接告诉我:
我可以帮你精准定位并给修复方案。