温馨提示×

如何编写ubuntu trigger脚本

小樊
36
2026-09-03 14:05:06
栏目: 智能运维

在 Ubuntu(以及一般的 Linux 系统)中,“trigger 脚本”并不是某一种固定格式,而通常是指在特定事件发生时自动执行的脚本。常见的“trigger”场景包括:

  • 系统启动 / 关机时触发
  • 定时器触发(类似 cron)
  • 文件或目录变化触发(inotify)
  • systemd 服务状态变化触发
  • 硬件事件(USB 插拔等)

下面按最常见方式给你讲怎么写和配置。


一、使用 systemd 做“事件触发脚本”(推荐)

1. 系统启动触发(开机运行)

脚本示例/usr/local/bin/start-script.sh

#!/bin/bash
echo "System booted at $(date)" >> /var/log/boot-trigger.log

赋予执行权限:

chmod +x /usr/local/bin/start-script.sh

创建 systemd 服务:

sudo vim /etc/systemd/system/my-trigger.service

内容:

[Unit]
Description=My Trigger Script
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/start-script.sh

[Install]
WantedBy=multi-user.target

启用:

sudo systemctl enable my-trigger.service

2. 定时器触发(类似 cron,但更强大)

示例:每天凌晨触发

脚本:

/usr/local/bin/daily.sh

创建 service:

# /etc/systemd/system/daily-trigger.service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/daily.sh

创建 timer:

# /etc/systemd/system/daily-trigger.timer
[Unit]
Description=Daily Trigger

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

[Install]
WantedBy=timers.target

启用:

sudo systemctl enable daily-trigger.timer
sudo systemctl start daily-trigger.timer

查看状态:

systemctl list-timers

二、使用 inotify 做“文件变化触发”

适合:文件被修改 / 新建 / 删除时执行脚本

安装:

sudo apt install inotify-tools

脚本示例:

#!/bin/bash
inotifywait -m /data -e create -e modify |
while read path action file
do
    echo "$file $action" >> /var/log/inotify.log
done

后台运行:

nohup ./watch.sh &

三、使用 cron 定时触发(最简单)

编辑当前用户的 cron:

crontab -e

示例(每分钟执行):

* * * * * /usr/local/bin/test.sh

四、USB / 硬件事件触发(udev)

示例:插入 U 盘执行脚本

规则文件:

sudo vim /etc/udev/rules.d/99-usb-trigger.rules

内容:

ACTION=="add", SUBSYSTEM=="usb", RUN+="/usr/local/bin/usb-trigger.sh"

脚本:

#!/bin/bash
echo "USB plugged" >> /var/log/usb.log

重载规则:

sudo udevadm control --reload

五、你适合哪种 Trigger?

场景 推荐方式
开机执行 systemd service
定时执行 systemd timer / cron
文件变化 inotify
硬件事件 udev
服务状态变化 systemd unit

如果你能说明:

  • 什么事件触发
  • 用户级还是系统级
  • Ubuntu 版本

我可以直接给你一套可复制的完整脚本 + 配置

0