温馨提示×

怎样编写linux trigger脚本

小樊
45
2026-09-17 20:34:07
栏目: 智能运维

在 Linux 里,“trigger 脚本”这个说法可能对应几种不同场景。下面我分常见情况给你讲,并给出可直接用的示例


一、systemd Trigger 脚本(最常见)

如果你说的是:某个服务启动/停止/状态变化时,自动执行脚本,那是 systemd 的 service + path/timer/socket 机制。

示例:服务启动后触发脚本

# /etc/systemd/system/my-trigger.service
[Unit]
Description=Run script after myapp starts
After=myapp.service

[Service]
Type=oneshot
ExecStart=/opt/scripts/trigger.sh

[Install]
WantedBy=multi-user.target

启用:

systemctl enable my-trigger.service

二、文件变化 Trigger(inotify / systemd path)

某个文件或目录变化时触发脚本。

方法 1:systemd path 单元

# /etc/systemd/system/watch.conf.path
[Path]
PathModified=/etc/myapp/config.conf

[Install]
WantedBy=multi-user.target
# /etc/systemd/system/watch.conf.service
[Service]
ExecStart=/opt/scripts/on_change.sh
systemctl enable watch.conf.path
systemctl start watch.conf.path

方法 2:inotifywait

#!/bin/bash
inotifywait -m -e modify /var/log/app.log | while read
do
    /opt/scripts/trigger.sh
done

三、定时 Trigger(cron / systemd timer)

cron 示例

# 每天 3 点执行
0 3 * * * /opt/scripts/trigger.sh

systemd timer

# trigger.timer
[Timer]
OnCalendar=*-*-* 03:00:00

[Install]
WantedBy=timers.target

四、udev Trigger(硬件事件)

USB 插拔、磁盘接入时触发脚本。

# /etc/udev/rules.d/99-usb.rules
ACTION=="add", SUBSYSTEM=="usb", RUN+="/opt/scripts/usb_trigger.sh"
udevadm control --reload

五、通用 Trigger 脚本模板

#!/bin/bash
set -e

LOG=/var/log/trigger.log
echo "$(date) trigger fired" >> $LOG

# 你的逻辑
systemctl restart myapp
chmod +x /opt/scripts/trigger.sh

你可以告诉我:

  • 服务触发 / 文件触发 / 时间触发 / 硬件触发
  • CentOS / Ubuntu / 嵌入式 Linux

我可以给你更精确的一整套配置

0