CentOS Trigger案例研究
导读:CentOS Trigger案例研究 一 概念与适用场景 在CentOS环境中,业界所说的“Trigger(触发器)”并非单一官方命令,而是对“在特定事件发生时自动执行操作”的一类机制的统称。常见实现路径包括:基于时间的systemd Ti...
CentOS Trigger案例研究
一 概念与适用场景 在CentOS环境中,业界所说的“Trigger(触发器)”并非单一官方命令,而是对“在特定事件发生时自动执行操作”的一类机制的统称。常见实现路径包括:基于时间的systemd Timer与cron,基于文件系统事件的inotifywait,以及系统级事件响应的udev规则等。选择路径的要点是:需要实时响应文件变化选 inotify;需要精确到秒级或复杂依赖选 systemd Timer;简单周期任务选 cron;设备热插拔选 udev。
二 案例一 文件系统变更触发同步脚本
- 目标:当目录**/data/input出现新文件或修改时,自动调用同步脚本/usr/local/bin/sync.sh**。
- 安装工具:sudo yum install -y inotify-tools
- 事件脚本:/usr/local/bin/sync.sh
- #!/usr/bin/env bash
set -euo pipefail
LOG=/var/log/sync_trigger.log
echo “$(date ‘+%F %T’) $1 $2 $3” >
>
“$LOG”
此处添加实际同步命令,例如:
/usr/local/bin/your_sync_tool.sh “$1$2”
- #!/usr/bin/env bash
set -euo pipefail
LOG=/var/log/sync_trigger.log
echo “$(date ‘+%F %T’) $1 $2 $3” >
>
“$LOG”
- 触发守护:/usr/local/bin/watch_input.sh
- #!/usr/bin/env bash
set -euo pipefail
INOTIFYWAIT=“/usr/bin/inotifywait”
EVENTS=“modify,attrib,close_write,move,create,delete”
“$INOTIFYWAIT” -m -q -e “$EVENTS” /data/input --format ‘%w%f %e %T’ |
while IFS=’ ’ read -r file action ts; do /usr/local/bin/sync.sh “$file” “$action” “$ts” done
- #!/usr/bin/env bash
set -euo pipefail
INOTIFYWAIT=“/usr/bin/inotifywait”
EVENTS=“modify,attrib,close_write,move,create,delete”
“$INOTIFYWAIT” -m -q -e “$EVENTS” /data/input --format ‘%w%f %e %T’ |
- 自启动(systemd服务):/etc/systemd/system/trigger-sync.service
- [Unit] Description=File change trigger for data sync After=network.target
- [Service] Type=simple ExecStart=/usr/local/bin/watch_input.sh Restart=on-failure StandardOutput=journal StandardError=journal
- [Install] WantedBy=multi-user.target
- 启用与验证
- sudo chmod +x /usr/local/bin/*.sh
- sudo systemctl daemon-reload
- sudo systemctl enable --now trigger-sync.service
- 验证:在**/data/input创建文件,观察journalctl -u trigger-sync.service与/var/log/sync_trigger.log**是否产生输出。
三 案例二 内核OOM触发告警与自我保护
- 现象:业务间歇性不可用,约1分钟后恢复。
- 定位:检查内核日志,发现 OOM Killer 终止了占用内存最高的进程(如mysqld)。
- grep “Out of memory” /var/log/messages
- dmesg -T | grep -i ‘memory’
- 处置与优化
- 调整应用内存参数(如MySQL缓冲池、连接数),降低峰值占用;必要时为关键服务设置内存上限(cgroups)与重启策略,避免级联故障。
- 建议增加监控告警:当日志出现“Out of memory”即触发短信/企业微信/钉钉告警,缩短恢复时间。
四 案例三 systemd Timer替代cron的精准触发
- 目标:每5分钟执行一次**/usr/local/bin/report.sh**,并确保系统启动后5分钟首次执行。
- 服务单元:/etc/systemd/system/report.service
- [Unit] Description=Periodic report job
- [Service] Type=oneshot ExecStart=/usr/local/bin/report.sh User=report
- 定时器单元:/etc/systemd/system/report.timer
- [Unit] Description=Run report every 5 minutes
- [Timer] OnBootSec=5min OnUnitActiveSec=5min Persistent=true
- [Install] WantedBy=timers.target
- 启用与验证
- sudo systemctl daemon-reload
- sudo systemctl enable --now report.timer
- 验证:systemctl list-timers report.timer;journalctl -u report.service
- 说明:相比cron,systemd Timer具备更强的依赖管理、日志归集(journald)、开机延迟执行与持久化能力,适合对时间精度和可靠性要求更高的场景。
五 实践要点与排错清单
- 日志与审计
- 触发器脚本统一输出到**/var/log/trigger_*.log**;用journalctl集中查看服务日志;必要时为脚本添加时间戳与关键变量日志。
- 自启动与幂等
- 使用systemd管理守护进程,设置Restart=on-failure;脚本需具备幂等性,避免重复处理同一事件(例如基于文件锁或内容哈希)。
- 安全基线
- 避免滥用**/etc/rc.local与系统级cron**;排查异常定时任务与启动项:检查**/var/spool/cron/、/etc/cron***、/etc/rc.local、/etc/init.d/;对关键文件做MD5或rpm -V完整性校验,发现被篡改及时恢复与溯源。
- 资源与故障隔离
- 对易触发资源争用的任务设置CPU/内存限制(cgroups/systemd slice),避免影响核心业务;对可能异常退出的触发器服务设置重启上限与告警。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS Trigger案例研究
本文地址: https://pptw.com/jishu/785447.html
