CentOS 触发机制概览
在 CentOS 中,“触发机制”指在特定事件或时间条件满足时自动执行操作的手段,覆盖服务管理、定时调度、文件系统、硬件与网络等多个层面。常见机制包括:
典型工作方式与适用场景
| 机制 | 触发源 | 配置要点 | 典型场景 |
|---|---|---|---|
| systemd 依赖/条件 | 服务状态、文件/路径、网络等条件变化 | Unit 段 After/Requires/ConditionPathExists= 等 | 依赖服务就绪后再启动;条件不满足时跳过启动 |
| systemd Timers | 时间(启动后、定时周期、空闲时等) | .timer 定义 OnBootSec/OnUnitActiveSec;用 systemctl list-timers 查看 | 精确周期任务、与系统启动/服务生命周期联动 |
| cron / anacron | 日历时间(分/时/日/月/周) | 编辑 crontab -e;系统级在 /etc/crontab 与 /etc/cron.d/;anacron 处理错过的任务 | 常规例行任务、日志轮转、备份 |
| inotify 文件事件 | 文件/目录被创建、修改、删除 | inotifywait -m -e modify,create,delete 监听并调用脚本 | 配置变更热加载、日志文件自动处理 |
| udev 硬件事件 | 设备插入/拔出 | /etc/udev/rules.d/99-my.rules 中执行脚本/设置权限 | U 盘自动挂载、网卡上线即配置 |
| iptables/nftables | 数据包/连接状态变化 | 规则中使用 -m conntrack --ctstate 等匹配并触发动作 | 新连接自动放行/拦截、连接状态联动策略 |
快速上手示例
使用 systemd Timer 替代 cron
[Unit]
Description=Hello Service
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/bin/echo "Hello at $(date)"
[Unit]
Description=Run hello.service every 5 minutes
[Timer]
OnBootSec=5min
OnUnitActiveSec=5min
Persistent=true
[Install]
WantedBy=timers.target
sudo systemctl daemon-reload
sudo systemctl enable --now hello.timer
systemctl list-timers --all
journalctl -u hello.timer -u hello.service
说明:上述 OnBootSec/OnUnitActiveSec 为时间触发;Persistent=true 可在关机错过周期后开机补执行。
使用 inotify 监听文件变更触发脚本
#!/usr/bin/env bash
inotifywait -m /etc/myapp -e modify,create,delete |
while read path action file; do
/usr/local/bin/reload_myapp.sh "$file"
done
说明:当 /etc/myapp 下发生变更时自动调用重载脚本,适合配置热加载与自动化运维。
与监控工具的区别