CentOS Trigger定制指南
在CentOS系统中,Trigger(触发器)是一种基于事件或时间条件的自动化机制,用于在特定场景(如系统启动、文件修改、定时到达)下自动执行预定义任务(如服务重启、数据备份、告警发送)。以下是常见的定制方法及详细步骤:
systemd是CentOS 7及以上版本的核心服务管理工具,支持Trigger单元(定义触发条件)与Timer单元(定义触发频率)结合,实现灵活的事件/时间驱动自动化。
首先需要创建一个.service文件,明确任务的具体执行内容。例如,创建一个每日数据备份服务:
sudo vi /etc/systemd/system/my_backup.service
文件内容如下:
[Unit]
Description=Daily Data Backup Service
After=network.target # 确保网络就绪后执行
[Service]
ExecStart=/usr/local/bin/backup_script.sh # 备份脚本路径
Restart=on-failure # 失败时自动重启
[Install]
WantedBy=multi-user.target # 设置为多用户模式启动
说明:ExecStart指定任务执行的脚本或命令,After定义服务启动的依赖条件(如网络就绪)。
若需基于系统事件(如网络启动、系统启动)触发服务,可创建.trigger文件。例如,网络启动后10秒触发备份服务:
sudo vi /etc/systemd/system/my_backup.trigger
文件内容如下:
[Unit]
Description=Trigger for Daily Backup on Network Up
OnNetworkUp=* # 网络启动时触发
OnBootSec=10s # 系统启动后10秒触发
[Install]
WantedBy=multi-user.target
说明:OnNetworkUp表示网络连接成功时触发,OnBootSec表示系统启动后延迟触发。
若需基于时间间隔(如每天凌晨2点)触发任务,需创建.timer文件。例如,每天2点执行备份服务:
sudo vi /etc/systemd/system/my_backup.timer
文件内容如下:
[Unit]
Description=Run Daily Backup at 2 AM
[Timer]
OnCalendar=*-*-* 02:00:00 # 每天2点执行
Persistent=true # 若错过时间,下次启动时补执行
[Install]
WantedBy=timers.target
说明:OnCalendar支持多种时间格式(如hourly、daily、Mon *-*-* 02:00:00),Persistent确保错过时间后补执行。
执行以下命令启用并启动Timer:
sudo systemctl enable my_backup.timer # 启用Timer(开机自启动)
sudo systemctl start my_backup.timer # 立即启动Timer
查看Timer运行状态:
sudo systemctl list-timers --all # 显示所有Timer的状态
查看服务日志确认触发是否成功:
journalctl -u my_backup.service # 查看服务执行日志
若需实时监控文件/目录变化(如代码部署、日志更新)并触发操作,可使用inotify-tools工具(轻量级、低延迟)。
sudo yum install inotify-tools -y
创建一个脚本(如/usr/local/bin/watch_web_dir.sh),监控/var/www/html目录的变化(创建、修改、删除):
#!/bin/bash
inotifywait -m /var/www/html -e create,modify,delete | while read path action file; do
echo "File $file in $path was $action. Triggering deployment..."
/usr/local/bin/deploy_frontend.sh # 自动部署脚本
done
赋予脚本执行权限:
chmod +x /usr/local/bin/watch_web_dir.sh
/usr/local/bin/watch_web_dir.sh # 后台运行(可添加到systemd服务实现开机自启)
说明:inotifywait -m表示持续监控,-e指定监控的事件类型(如create、modify、delete)。
若需简单的周期性任务(如每日日志清理、每周报表生成),可使用cron(CentOS默认安装)。
crontab -e # 当前用户的crontab
sudo crontab -e # root用户的crontab
例如,每天凌晨1点清理/tmp目录下超过7天的临时文件:
0 1 * * * find /tmp -type f -mtime +7 -exec rm -f {} \;
说明:cron语法为分钟 小时 日期 月份 星期 命令,*表示任意值,-mtime +7表示文件修改时间超过7天。
若需在某个服务启动后自动启动另一个服务(如数据库服务启动后启动应用服务),可使用systemd的服务依赖功能。
例如,创建dependent_app.service,依赖postgresql.service:
sudo vi /etc/systemd/system/dependent_app.service
文件内容如下:
[Unit]
Description=Dependent Application Service
After=postgresql.service # 在PostgreSQL服务启动后启动
Requires=postgresql.service # 依赖PostgreSQL服务(若PostgreSQL未启动,则不会启动本服务)
[Service]
ExecStart=/usr/local/bin/app_start.sh # 应用启动脚本
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload # 重新加载systemd配置
sudo systemctl start dependent_app.service # 启动依赖服务
说明:After定义启动顺序,Requires定义强依赖(依赖服务未启动则本服务不启动)。
/usr/local/bin/backup_script.sh需赋予755权限),避免安全风险。journalctl或tail -f查看触发器日志(如journalctl -u my_backup.service),及时排查问题。