CentOS触发器使用教程(常见场景)
数据库触发器用于在表操作(INSERT、UPDATE、DELETE)时自动执行逻辑,适用于数据一致性维护(如自动填充字段、级联更新)。
步骤:
DELIMITER //(临时修改分隔符,避免与触发器内语句冲突)→ CREATE TRIGGER 触发器名 触发时机(BEFORE/AFTER) 触发事件(INSERT/UPDATE/DELETE) ON 表名 FOR EACH ROW BEGIN 逻辑代码 END// → DELIMITER ;(恢复默认分隔符)。users表插入新用户时,自动将status字段设为active。DELIMITER //
CREATE TRIGGER before_insert_user
BEFORE INSERT ON users
FOR EACH ROW
BEGIN
SET NEW.status = 'active';
END//
DELIMITER ;
status的记录,查询结果应自动填充status为active。Systemd的触发器通过**服务单元(.service)和定时器单元(.timer)**实现,适用于定时执行任务或依赖其他服务的事件触发。
1. 定时执行任务(定时器模式)
/usr/bin/backup.sh)。sudo vi /etc/systemd/system/backup.service
内容示例:[Unit]
Description=Daily Backup Service
[Service]
ExecStart=/usr/bin/backup.sh
User=root
sudo vi /etc/systemd/system/backup.timer
内容示例:[Unit]
Description=Run Backup Daily at 2 AM
[Timer]
OnCalendar=*-*-* 02:00:00 # 每天2点触发
Persistent=true # 错过的任务会在下次启动时补执行
[Install]
WantedBy=timers.target
sudo systemctl daemon-reload # 重新加载systemd配置
sudo systemctl enable --now backup.timer # 启用并立即启动定时器
sudo systemctl list-timers --all # 查看所有定时器状态
sudo systemctl status backup.timer # 查看特定定时器详情
2. 事件驱动触发(依赖服务)
network.service启动后自动运行my_service.service,编辑my_service.service:[Unit]
Description=My Custom Service
After=network.service # 依赖network服务
[Service]
ExecStart=/usr/bin/my_service_executable
Restart=on-failure
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now my_service.service
适用于监控文件/目录变化(如新增、修改、删除),触发相应操作(如备份、通知)。
步骤:
sudo yum install inotify-tools -y
/data目录的文件修改):sudo vi /usr/local/bin/file_monitor.sh
内容示例:#!/bin/bash
inotifywait -m /data -e modify | while read path action file; do
echo "$(date): File $file in $path was $action" >> /var/log/file_monitor.log
# 此处可添加其他操作(如备份、发送邮件)
done
chmod +x /usr/local/bin/file_monitor.sh
/usr/local/bin/file_monitor.sh & # 后台运行(生产环境建议用systemd管理)
/data目录添加或修改文件,查看/var/log/file_monitor.log是否有记录。Yum/DNF在执行安装、更新、删除操作时,会自动触发依赖处理(如解决依赖关系、安装所需包)。若需自定义触发逻辑(如安装后执行脚本),可使用yum-plugin-trigger插件。
步骤:
sudo yum install yum-plugin-trigger -y
/etc/yum/pluginconf.d/trigger.conf,启用插件并添加规则:[main]
enabled=1
[trigger]
name=my_custom_trigger # 触发器名称
command=/usr/local/bin/custom_script.sh # 触发后执行的脚本路径
yum install或dnf install命令时,插件会自动调用custom_script.sh。适用于简单的周期性任务(如每天备份、每小时清理日志),是CentOS中最常用的触发器之一。
步骤:
crontab -e
分钟 小时 日 月 星期 命令(*表示任意值)。
/home/user/backup.sh。0 2 * * * /home/user/backup.sh
/tmp目录下超过7天的文件。0 * * * * find /tmp -type f -mtime +7 -exec rm {} \;
crontab -l。echo "$(date): Backup started" >> /var/log/backup.log),并通过tail -f /var/log/cron查看cron日志。