在 Ubuntu 里,“trigger”这个词可能对应几种不同场景,下面我按最常见的几种情况来说明如何调试。你可以先对照看看你指的是哪一种。
如果你说的是 systemd 的 trigger / 单元触发机制(如 systemctl trigger、*.service 被 path / timer / socket 触发)
systemctl list-triggers
systemctl show <unit>.service
查看谁触发了它:
systemctl list-dependencies <unit>.service
sudo systemctl start <unit>.service
journalctl -u <unit>.service -f
systemctl status <unit>.path
systemctl status <unit>.timer
journalctl -u <unit>.path
开启 debug 日志:
sudo systemctl edit <unit>.service
加入:
[Service]
Environment=SYSTEMD_LOG_LEVEL=debug
如果你说的是 apt / dpkg 的 trigger(如 apt install 后执行脚本)
dpkg -L <package> | grep trigger
cat /var/lib/dpkg/triggers/*
sudo dpkg --configure -a
sudo dpkg --triggers-only <package>
trigger 通常在:
/var/lib/dpkg/info/<package>.postinst
/var/lib/dpkg/info/<package>.triggers
加 set -x 调试:
sudo nano /var/lib/dpkg/info/<package>.postinst
在脚本开头加:
set -x
如果你说的是 udev trigger
sudo udevadm trigger
sudo udevadm control --reload
sudo udevadm monitor
sudo udevadm test /sys/class/...
如果你自己写了 trigger 逻辑:
echo "trigger fired" >> /var/log/trigger.logbash -x script.shstrace:strace -f your_trigger_command
你可以直接告诉我:
我可以按你的具体情况一步步帮你调。