温馨提示×

CentOS Trigger配置指南

小樊
41
2025-12-13 17:20:13
栏目: 智能运维

CentOS 中的 Trigger 配置指南

一 概念与适用场景

  • CentOS 环境中,“触发器”并非单一命令,而是一类机制:包括 systemd 服务依赖与定时器文件事件监听定时任务硬件/网络事件、以及 监控平台(如 Zabbix)的触发器。常见用途有:按时间或依赖自动启停服务、文件变更自动处理、日志关键字告警、设备热插拔响应等。

二 systemd 定时器与服务联动

  • 适用:替代 cron,实现基于日历/相对时间的任务,或与服务生命周期联动。
  • 步骤:
    1. 创建服务单元(例如:/etc/systemd/system/my_service.service
      [Unit]
      Description=My Trigger Service
      After=network.target
      
      [Service]
      Type=oneshot
      ExecStart=/usr/local/bin/my_script.sh
      
    2. 创建定时器单元(例如:/etc/systemd/system/my_service.timer
      [Unit]
      Description=Timer for My Trigger Service
      
      [Timer]
      OnBootSec=5min
      OnUnitActiveSec=1h
      Persistent=true
      
      [Install]
      WantedBy=timers.target
      
    3. 启用与启动
      sudo systemctl daemon-reload
      sudo systemctl enable --now my_service.timer
      
    4. 验证
      systemctl list-timers --all
      journalctl -u my_service.timer -u my_service.service
      
  • 要点:使用 .timerOnBootSec/OnUnitActiveSec/Persistent 等指令实现“定时/相对时间”触发;服务建议设为 Type=oneshot 配合定时器使用。

三 文件事件触发脚本

  • 适用:对目录/文件的 创建、修改、删除 等事件进行实时响应(如自动重载、同步、备份)。
  • 步骤:
    1. 安装工具
      sudo yum install -y inotify-tools
      
    2. 编写守护脚本(例如:/usr/local/bin/watch_trigger.sh
      #!/usr/bin/env bash
      WATCH_DIR="/var/www/html"
      LOG="/var/log/watch_trigger.log"
      
      inotifywait -m -e modify,create,delete,move --format '%e %w%f' "$WATCH_DIR" | while IFS= read -r event file; do
          echo "$(date '+%F %T') $event $file" >> "$LOG"
          # 在此添加你的业务逻辑,例如:
          # systemctl reload myapp.service
      done
      
    3. 设为系统服务(可选,便于开机自启与日志归集)
      sudo tee /etc/systemd/system/watch_trigger.service >/dev/null <<'EOF'
      [Unit]
      Description=Watch Trigger Service
      After=network.target
      
      [Service]
      Type=simple
      ExecStart=/usr/local/bin/watch_trigger.sh
      Restart=always
      
      [Install]
      WantedBy=multi-user.target
      EOF
      
      sudo systemctl daemon-reload
      sudo systemctl enable --now watch_trigger.service
      
  • 要点:使用 inotifywait -m 持续监听;对高并发写入场景,注意脚本执行时长与并发控制。

四 监控平台触发器 Zabbix Trigger 与远程命令

  • 适用:当监控指标达到阈值时自动告警或执行修复动作(如下线异常会话)。
  • 快速示例(Zabbix 3.x,CentOS 7 场景):
    1. 创建触发器(Expression):当在线用户数大于 2 时告警
      {Template OS Linux:system.users.num.last()}>2
      
    2. 开启 Agent 远程命令
      sudo sed -i 's/^# EnableRemoteCommands=0/EnableRemoteCommands=1/' /usr/local/zabbix/etc/zabbix_agentd.conf
      sudo systemctl restart zabbix_agentd
      
    3. 配置 sudo 免密(仅授予必要命令)
      echo 'zabbix ALL=(ALL) NOPASSWD: /usr/local/bin/kill_user.sh' | sudo tee /etc/sudoers.d/zabbix
      sudo chmod 440 /etc/sudoers.d/zabbix
      
    4. 创建 Action:Operation 选择 Remote command,Target 为 Current host,Execute on 选 Zabbix agent,命令如:
      sudo /usr/local/bin/kill_user.sh
      
    5. 验证
      • 观察 Monitoring → EventsReports → Action log 中的执行结果(状态为 Executed 表示已下发)。
  • 要点:远程命令由 Server 下发至 Agent;Agent 端需开启 EnableRemoteCommandszabbix 用户对命令具备 sudo 权限;动作执行结果可在事件/动作日志中核查。

五 其他常见触发器与选型建议

  • 选型速览
    触发器类型 典型用途 关键配置/工具 适用场景
    systemd 定时器 定时/相对时间任务、与服务联动 .timer、OnBootSec、OnUnitActiveSec、Persistent 替代 cron、依赖管理复杂
    cron / anacron 简单周期任务、非 7x24 主机保底 crontab、/etc/crontab、anacron 轻量周期任务
    inotify 文件事件 文件变更即时处理 inotifywait、inotify-tools 配置热加载、日志采集
    udev 硬件事件 设备插入/拔出响应 /etc/udev/rules.d/*.rules USB/磁盘热插拔
    Zabbix Trigger 指标阈值告警与自动修复 Trigger、Action、Remote command 监控联动与自愈
  • 实践建议
    • 优先使用 systemd 定时器 替代 cron,获得更好的依赖与日志集成。
    • 文件事件脚本保持 幂等快速返回,避免阻塞事件循环。
    • 远程执行务必最小权限配置 sudo,并在 动作日志 中复核执行结果。

0