Ubuntu 下测试触发器的实用方法
一 文件系统事件触发 inotifywait
- 安装工具:sudo apt-get install inotify-tools
- 准备脚本:例如 /usr/local/bin/handle.sh
- 内容:#!/bin/bash
echo “$(date) $ACTION on $FILE” >> /var/log/trigger.log
- 运行监听(在测试目录执行):
- inotifywait -m -e create,modify,delete,move /tmp/test |
while read DIR ACTION FILE; do
/usr/local/bin/handle.sh “$DIR” “$ACTION” “$FILE”
done
- 验证:在 /tmp/test 下执行 touch a.txt、echo 1>a.txt、rm a.txt,查看 /var/log/trigger.log 是否出现对应记录。
二 定时触发 systemd Timer 与 cron
- systemd Timer
- 服务单元 /etc/systemd/system/hello.service
- [Unit] Description=Say hello
- [Service] Type=oneshot ExecStart=/usr/bin/echo ‘Hello at %t’
- 定时器单元 /etc/systemd/system/hello.timer
- [Unit] Description=Run hello every 2 minutes
- [Timer] OnCalendar=*:0/2 Persistent=true
- [Install] WantedBy=timers.target
- 启用与查看:
- sudo systemctl daemon-reload
- sudo systemctl enable --now hello.timer
- systemctl list-timers --all
- cron
- 编辑:crontab -e
- 示例(每5分钟):*/5 * * * * /usr/bin/date >> /var/log/cron-test.log 2>&1
- 验证:tail -f /var/log/cron-test.log 或 systemctl status cron。
三 设备热插拔触发 udev 规则
- 编写规则(示例匹配 U 盘厂商/产品 ID,需替换为你的实际值):
- /etc/udev/rules.d/99-usb-test.rules
- ACTION==“add”, SUBSYSTEM==“usb”, ATTR{idVendor}==“1234”, ATTR{idProduct}==“5678”, RUN+=“/usr/local/bin/usb-added.sh %k”
- 准备脚本 /usr/local/bin/usb-added.sh
- 内容:#!/bin/bash
echo “$(date) USB device $1 added” >> /var/log/udev-trigger.log
- 使规则生效并触发测试:
- sudo udevadm control --reload-rules && sudo udevadm trigger
- 插入匹配的 USB 设备,查看 /var/log/udev-trigger.log。
四 数据库触发器 MySQL 的测试
- 安装与登录:sudo apt-get install mysql-server;mysql -u root -p
- 建库表与触发器:
- CREATE DATABASE IF NOT EXISTS testdb; USE testdb;
- CREATE TABLE users(id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50), email VARCHAR(50), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
- DELIMITER //
CREATE TRIGGER trg_users_bi BEFORE INSERT ON users
FOR EACH ROW
BEGIN
SET NEW.username = LOWER(NEW.username);
END//
DELIMITER ;
- 测试验证:
- INSERT INTO users(username,email) VALUES(‘Alice’,‘alice@example.com’);
- SELECT * FROM users; 应看到 username 为小写 alice。
五 内核级触发 SysRq 的测试
- 启用 SysRq:cat /proc/sys/kernel/sysrq;若为 0,执行 echo 1 | sudo tee /proc/sys/kernel/sysrq(持久化:echo “kernel.sysrq=1” | sudo tee -a /etc/sysctl.conf && sudo sysctl -p)
- 触发示例(只读同步、查看内存、安全重启):
- 同步已挂载文件系统:echo s | sudo tee /proc/sysrq-trigger
- 打印内存信息:echo m | sudo tee /proc/sysrq-trigger
- 安全重启:echo b | sudo tee /proc/sysrq-trigger
- 说明:SysRq 命令如 s/m/b 等可用于紧急调试与恢复,生产环境慎用。