温馨提示×

ubuntu如何测试触发器功能

小樊
47
2026-01-11 16:48:39
栏目: 智能运维

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 等可用于紧急调试与恢复,生产环境慎用。

0