温馨提示×

怎样编写ubuntu trigger

小樊
39
2026-09-06 18:39:03
栏目: 智能运维

在 Ubuntu(以及一般的 Linux 系统)里,“trigger” 这个词可能对应几种不同场景。下面我按最常见的几种情况给你说明,你可以看看你指的是哪一种。


一、Systemd Trigger(最常见)

如果你说的是 “当某个事件发生时自动执行任务”,通常用 systemd 服务 + path / timer / socket 来实现。

1️⃣ 基于文件变化的 Trigger(systemd path)

例如:当 /data/input.txt 被修改时执行脚本。

步骤:

  1. 创建服务
sudo vim /etc/systemd/system/my-trigger.service

内容:

[Unit]
Description=Run script on file change

[Service]
Type=oneshot
ExecStart=/usr/local/bin/my-script.sh
  1. 创建 path 触发器
sudo vim /etc/systemd/system/my-trigger.path

内容:

[Unit]
Description=Watch input file

[Path]
PathChanged=/data/input.txt

[Install]
WantedBy=multi-user.target
  1. 启用
sudo systemctl enable --now my-trigger.path

✅ 文件一变化,脚本自动执行


2️⃣ 基于时间的 Trigger(systemd timer)

例如:每天 3 点执行

sudo vim /etc/systemd/system/my-timer.timer
[Unit]
Description=Daily trigger

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true

[Install]
WantedBy=timers.target
sudo systemctl enable --now my-timer.timer

二、APT Trigger(软件包相关)

如果你说的是 Ubuntu 软件包安装后的 trigger(如 apt install 后自动执行):

在 Debian/Ubuntu 包中:

/var/lib/dpkg/info/xxx.triggers

例如:

interest /usr/share/icons

然后在 postinst 中处理:

if [ "$1" = "triggered" ]; then
    update-icon-caches /usr/share/icons
fi

⚠️ 这个一般只在打包 Debian 软件时用到。


三、Shell / Cron Trigger(简单任务)

如果只是“定时触发”:

crontab -e
0 3 * * * /usr/local/bin/my-script.sh

四、Udev Trigger(硬件事件)

例如:U 盘插入时触发

sudo vim /etc/udev/rules.d/99-usb.rules
ACTION=="add", SUBSYSTEM=="block", RUN+="/usr/local/bin/usb.sh"
sudo udevadm control --reload

五、你具体想做什么?

你可以直接告诉我:

  • ✅ 文件变化触发?
  • ✅ 定时触发?
  • ✅ 服务启动触发?
  • ✅ 硬件插入触发?
  • ✅ 软件包安装触发?

我可以给你完整可直接用的示例

0