温馨提示×

如何写ubuntu trigger规则

小樊
52
2026-09-27 20:42:27
栏目: 智能运维

在 Ubuntu(以及一般的 Linux 系统)中,“trigger 规则”通常出现在以下几种语境中。我先帮你梳理常见的几种,并给出写法示例,你可以对照自己的使用场景:


一、systemd 中的 trigger(最常见)

在 Ubuntu 中,很多“触发规则”是通过 systemd unit 实现的,比如:

  • 某服务启动后触发另一个服务
  • 某设备插入后触发脚本
  • 某路径变化后触发任务

1. 服务之间的 trigger(通过 Wants / After)

# /etc/systemd/system/b.service
[Unit]
Description=Service B
After=a.service
Requires=a.service

[Service]
ExecStart=/usr/bin/echo "B triggered by A"

[Install]
WantedBy=multi-user.target

A 启动时会触发 B(通过 Wants= 或 Requires=)。


2. 路径触发(path unit)

当某个文件或目录发生变化时触发:

# /etc/systemd/system/watch.conf.path
[Unit]
Description=Watch config file

[Path]
PathModified=/etc/myapp/config.conf

[Install]
WantedBy=multi-user.target
# /etc/systemd/system/watch.conf.service
[Unit]
Description=Reload on config change

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl restart myapp

启用:

systemctl enable watch.conf.path
systemctl start watch.conf.path

3. 设备触发(device + udev)

插上 USB 设备时触发脚本:

# /etc/udev/rules.d/99-usb-trigger.rules
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="1234", ATTR{idProduct}=="5678", RUN+="/usr/local/bin/usb.sh"

然后:

udevadm control --reload

二、APT 的 trigger(Debian / Ubuntu 特有)

Ubuntu 使用 dpkg 的 triggers 机制,在软件包安装/升级后自动执行操作。

示例:注册一个 trigger

# debian/triggers
interest /usr/share/myapp/templates
# 在 postinst 中处理
case "$1" in
    configure)
        if [ "$2" = "triggered" ]; then
            /usr/bin/rebuild-myapp
        fi
        ;;
esac

三、cron / anacron 的“条件触发”

虽然不是严格 trigger,但可用时间或条件触发:

@reboot /usr/local/bin/init.sh
*/5 * * * * /usr/local/bin/check_and_run.sh

四、如果你指的是“自定义 trigger 规则”

如果是你自己的程序,可以:

  • 用 inotifywait 监听文件
  • 用 systemd path unit
  • 用 dbus 信号触发

例如 inotify:

inotifywait -m /tmp | while read event; do
    /usr/local/bin/handler.sh
done

你可以告诉我:

  • 是想 服务触发服务?
  • 还是 文件/设备变化触发脚本?
  • 或者是 写 Debian 包 trigger?

我可以直接给你一份“可复制即用”的规则模板。

0 踩