温馨提示×

CentOS Trigger怎么安装

小樊
43
2026-01-08 03:14:48
栏目: 智能运维

在 CentOS 上实现 Trigger 的常用做法

CentOS 中并没有一个统一叫 Trigger 的官方软件包,通常大家是把“触发器”理解为在某些事件发生时自动执行操作。常见实现路径包括:文件事件触发(inotifywait)、定时触发(systemd Timercron)、设备热插拔触发(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]
        • WantedBy=timers.target
    • 启用: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 前端按向导创建监控项与触发器即可。

0