centos

centos触发器使用教程

小樊
56
2025-10-09 04:39:02
栏目: 智能运维

CentOS触发器使用教程(常见场景)

一、数据库触发器(以MySQL为例)

数据库触发器用于在表操作(INSERT、UPDATE、DELETE)时自动执行逻辑,适用于数据一致性维护(如自动填充字段、级联更新)。
步骤:

  1. 登录MySQL:使用具有足够权限的用户(如root)登录数据库。
  2. 创建触发器
    • 语法结构: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 ;
      
  3. 验证触发器:插入一条未指定status的记录,查询结果应自动填充statusactive

二、Systemd服务触发器(定时/事件驱动)

Systemd的触发器通过**服务单元(.service)定时器单元(.timer)**实现,适用于定时执行任务或依赖其他服务的事件触发。
1. 定时执行任务(定时器模式)

2. 事件驱动触发(依赖服务)

三、文件系统事件触发器(inotifywait)

适用于监控文件/目录变化(如新增、修改、删除),触发相应操作(如备份、通知)。
步骤:

  1. 安装inotify-tools
    sudo yum install inotify-tools -y
    
  2. 编写监控脚本(如监控/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
    
  3. 赋予执行权限并运行
    chmod +x /usr/local/bin/file_monitor.sh
    /usr/local/bin/file_monitor.sh &   # 后台运行(生产环境建议用systemd管理)
    
  4. 验证效果:向/data目录添加或修改文件,查看/var/log/file_monitor.log是否有记录。

四、包管理器触发器(yum/dnf)

Yum/DNF在执行安装、更新、删除操作时,会自动触发依赖处理(如解决依赖关系、安装所需包)。若需自定义触发逻辑(如安装后执行脚本),可使用yum-plugin-trigger插件。
步骤:

  1. 安装插件
    sudo yum install yum-plugin-trigger -y
    
  2. 配置自定义触发器
    编辑/etc/yum/pluginconf.d/trigger.conf,启用插件并添加规则:
    [main]
    enabled=1
    
    [trigger]
    name=my_custom_trigger  # 触发器名称
    command=/usr/local/bin/custom_script.sh  # 触发后执行的脚本路径
    
  3. 测试触发器:执行yum installdnf install命令时,插件会自动调用custom_script.sh

五、传统定时任务(cron)

适用于简单的周期性任务(如每天备份、每小时清理日志),是CentOS中最常用的触发器之一。
步骤:

  1. 编辑当前用户的crontab
    crontab -e
    
  2. 添加定时任务
    格式:分钟 小时 日 月 星期 命令*表示任意值)。
    • 示例1:每天凌晨2点执行/home/user/backup.sh
      0 2 * * * /home/user/backup.sh
      
    • 示例2:每小时的第0分钟清理/tmp目录下超过7天的文件。
      0 * * * * find /tmp -type f -mtime +7 -exec rm {} \;
      
  3. 保存并验证
    • 保存文件后,cron会自动加载任务。
    • 查看当前用户的cron任务:crontab -l
  4. 日志调试
    在脚本中添加日志记录(如echo "$(date): Backup started" >> /var/log/backup.log),并通过tail -f /var/log/cron查看cron日志。

0
看了该问题的人还看了