温馨提示×

如何创建Ubuntu触发规则

小樊
43
2026-08-05 23:17:05
栏目: 智能运维

在 Ubuntu 中,“触发规则”通常指的是 在特定事件发生时自动执行某个动作。不同场景下实现方式不同,下面按最常见的几种需求给你一个清晰对照,并给出可操作的示例。


一、定时触发(最常见 ✅)

使用 cron

适合:定时执行脚本、命令

1️⃣ 编辑当前用户的 cron

crontab -e

2️⃣ 添加规则(示例)

需求 规则
每分钟 * * * * * /path/to/script.sh
每天 2 点 0 2 * * * /path/to/script.sh
每小时 0 * * * * /path/to/script.sh
开机后 1 分钟 @reboot sleep 60 && /path/to/script.sh

✅ 脚本需有执行权限:

chmod +x /path/to/script.sh

二、系统事件触发(推荐 ✅)

使用 systemd

适合:服务启动、文件变化、设备插入、定时任务


1️⃣ 定时触发(systemd timer)

创建 service

# ~/.config/systemd/user/mytask.service
[Unit]
Description=My Task

[Service]
ExecStart=/path/to/script.sh

创建 timer

# ~/.config/systemd/user/mytask.timer
[Unit]
Description=Run my task

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

[Install]
WantedBy=timers.target

启用

systemctl --user daemon-reload
systemctl --user enable --now mytask.timer

2️⃣ 文件变化触发(inotify)

适合:目录变化自动执行

sudo apt install inotify-tools

示例:

inotifywait -m /data -e create -e modify |
while read path action file; do
    echo "$file changed"
done

三、网络 / 登录触发

1️⃣ 用户登录触发

~/.bashrc
~/.profile

⚠️ 不推荐放耗时任务


2️⃣ 网络连通触发(NetworkManager)

sudo nano /etc/NetworkManager/dispatcher.d/99-my-script
#!/bin/bash
if [ "$2" = "up" ]; then
    /path/to/script.sh
fi
sudo chmod +x /etc/NetworkManager/dispatcher.d/99-my-script

四、硬件 / 设备触发(udev)

适合:U 盘插入、串口连接

sudo nano /etc/udev/rules.d/99-usb.rules
ACTION=="add", SUBSYSTEM=="usb", RUN+="/path/to/script.sh"

重载规则:

sudo udevadm control --reload

五、GUI 自动触发(桌面环境)

GNOME 自启动

~/.config/autostart/myapp.desktop
[Desktop Entry]
Type=Application
Exec=/path/to/script.sh
Hidden=false

六、如何选?快速判断 ✅

场景 推荐方式
定时执行 cron / systemd timer
开机执行 systemd / crontab @reboot
文件变化 inotify
网络变化 NetworkManager dispatcher
设备插入 udev
登录执行 .bashrc / autostart

七、我可以帮你定制

你可以直接告诉我:

  • ✅ Ubuntu 版本(20.04 / 22.04 / 24.04)
  • ✅ 触发条件(什么时候)
  • ✅ 执行内容(脚本 / 命令 / 服务)

我可以给你 完整可直接用的规则文件

0