Ubuntu 触发器的使用指南
概念澄清 在 Ubuntu 中并没有一个统一的名为 “Ubuntu Trigger” 的系统工具;日常所说的“触发器”通常指基于时间的任务(如 cron、systemd Timers)、基于事件的监控(如 inotify)、或数据库中的触发器(如 MySQL 的 DML 触发器)。选择合适的方式取决于你的触发条件:时间、文件变化、系统事件,还是数据库表事件。
常用触发器与快速上手
定时触发
0 6 * * * /path/to/script.sh 表示每天 06:00 执行脚本。命令:crontab -e。适合简单、周期性的任务。OnCalendar=*-*-* 02:00:00),然后启用:sudo systemctl enable --now mytimer.timer。适合需要与 systemd 生态深度集成、需要日志与依赖管理的任务。事件触发
inotify-tools,编写监控脚本,例如监控目录并在文件创建/修改时执行同步或通知:#!/usr/bin/env bash
SRC="/path/to/src"
TGT="/path/to/tgt"
inotifywait -m -r -e create,modify,delete --format '%w%f' "$SRC" | while IFS= read -r file; do
rsync -a --delete "$SRC/" "$TGT"
done
运行:chmod +x sync.sh && nohup ./sync.sh &。适合目录实时镜像、日志变更通知等场景。数据库触发
TRIGGER 权限,再创建触发器。例如:GRANT TRIGGER ON testdb.* TO 'your_user'@'localhost';
FLUSH PRIVILEGES;
DELIMITER //
CREATE TRIGGER after_user_insert
AFTER INSERT ON users
FOR EACH ROW
BEGIN
INSERT INTO logs(message, log_time)
VALUES (CONCAT('New user: ', NEW.name), NOW());
END//
DELIMITER ;
验证:向 users 插入数据并检查 logs 表。适合在表数据变更时自动写审计、联动更新等。如何选择
| 触发条件 | 推荐工具 | 适用场景 | 关键要点 |
|---|---|---|---|
| 固定时间/周期 | cron / systemd Timers | 备份、报表、清理 | cron 简单;Timers 与 systemd 集成更好、可持久化与依赖管理 |
| 文件/目录变化 | inotify | 实时同步、日志监控 | 低延迟、注意事件去抖与资源占用 |
| 系统事件 | systemd 路径/设备/网络依赖 | 联网后启动、U 盘插入执行 | 依赖目标单元与触发条件配置 |
| 数据库表事件 | MySQL 触发器 | 审计、联动写入 | 注意权限、避免递归与性能影响 |
| 上述工具和方法覆盖了 Ubuntu 下最常见的“触发器”需求,从系统层面到数据库层面均可实现自动化。 |
注意事项与排错
journalctl -u <unit> 或 tail -f 排查。