在 CentOS 上实现 Trigger 的常用做法
在 CentOS 中并没有一个统一叫 Trigger 的官方软件包,通常大家是把“触发器”理解为在某些事件发生时自动执行操作。常见实现路径包括:文件事件触发(inotifywait)、定时触发(systemd Timer 或 cron)、设备热插拔触发(udev),以及在监控平台 Zabbix 中使用的“触发器(Trigger)”。下面按场景给出可直接执行的安装与配置步骤。
方案一 文件事件触发 inotifywait
- 安装工具
- CentOS 7:sudo yum install -y epel-release && sudo yum install -y inotify-tools
- CentOS 8/Stream:sudo dnf install -y inotify-tools
- 准备脚本
- 示例:/opt/scripts/handle.sh
- #!/bin/bash
- echo “$(date) changed: $1” >> /var/log/trigger.log
- chmod +x /opt/scripts/handle.sh
- 启动监听
- 监视目录并触发脚本:
- inotifywait -m /opt/watch -e create,modify,delete |
- while read path action file; do
- /opt/scripts/handle.sh “$file”
- done
- 建议以 systemd 服务托管(可选)
- /etc/systemd/system/trigger-inotify.service
- [Unit]
- Description=Inotify Trigger Service
- After=network.target
- [Service]
- Type=simple
- ExecStart=/usr/bin/inotifywait -m /opt/watch -e create,modify,delete --format ‘%w%f %e’ | while read f a; do /opt/scripts/handle.sh “$f”; done
- Restart=always
- [Install]
- WantedBy=multi-user.target
- 启用:sudo systemctl daemon-reload && sudo systemctl enable --now trigger-inotify.service
方案二 定时触发 systemd Timer 或 cron
- systemd Timer(推荐,更现代)
- 服务单元:/etc/systemd/system/trigger-timer.service
- [Unit]
- Description=Run trigger script
- [Service]
- Type=oneshot
- ExecStart=/opt/scripts/handle.sh
- 定时器单元:/etc/systemd/system/trigger-timer.timer
- [Unit]
- Description=Run every 5 minutes
- [Timer]
- OnBootSec=5min
- OnUnitActiveSec=5min
- Persistent=true
- [Install]
- 启用:sudo systemctl daemon-reload && sudo systemctl enable --now trigger-timer.timer
- 查看状态:systemctl list-timers
- cron(最简)
- 编辑:crontab -e
- 示例:*/5 * * * * /opt/scripts/handle.sh >> /var/log/trigger.log 2>&1
方案三 设备热插拔触发 udev
- 新建规则:/etc/udev/rules.d/99-mydevice.rules
- ACTION==“add”, SUBSYSTEM==“usb”, ATTR{idVendor}==“1234”, ATTR{idProduct}==“5678”, RUN+=“/opt/scripts/handle.sh %k”
- 重新加载并触发
- sudo udevadm control --reload-rules && sudo udevadm trigger
- 说明:将 idVendor/idProduct 替换为你的设备实际值,可在插拔设备后用 udevadm info 查询。
方案四 如果你指的是 Zabbix 的 Trigger
- 安装 Zabbix Server/Agent(以 CentOS 7 + Zabbix 5.0 为例)
- 安装源与组件:
- rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
- sed -i ‘s#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#’ /etc/yum.repos.d/zabbix.repo
- yum clean all
- yum install -y zabbix-server-mysql zabbix-agent
- yum install -y centos-release-scl
- yum install -y zabbix-web-mysql-scl zabbix-apache-conf-scl
- 数据库与初始化(MariaDB)
- yum install -y mariadb-server
- systemctl enable --now mariadb
- mysql_secure_installation
- mysql -uroot -p -e “CREATE DATABASE zabbix DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;”
- mysql -uroot -p -e “GRANT ALL PRIVILEGES ON zabbix.* TO zabbix@localhost IDENTIFIED BY ‘YourPass’;”
- zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
- 配置与前端
- /etc/zabbix/zabbix_server.conf 中设置 DBPassword=YourPass
- /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf 设置 php_value[date.timezone]=Asia/Shanghai
- systemctl enable --now zabbix-server zabbix-agent httpd rh-php72-php-fpm
- 在 Web 界面创建“触发器”
- 概念链路:监控项(Item) → 触发器(Trigger,表达式评估为“问题/已解决”) → 事件(Event) → 动作(Action,如发送告警/执行命令)。在 Zabbix 前端按向导创建监控项与触发器即可。