Linux Trigger定制化方法
Trigger(触发器)是Linux系统中实现事件驱动自动化的核心工具,可根据时间周期、系统事件、文件变化等条件,自动执行预定义脚本或操作。以下是常见的定制化实现方式,覆盖不同场景需求:
Systemd是Linux主流服务管理工具,通过服务单元(.service)定义操作逻辑,定时器单元(.timer)控制触发条件,适合需要精准时间调度或服务依赖的场景(如每日备份、服务启动后执行)。
/etc/systemd/system/backup.service,内容如下:[Unit]
Description=Daily Backup Service
[Service]
Type=oneshot # 一次性执行(非持续运行)
ExecStart=/usr/local/bin/backup_script.sh # 自定义脚本路径
/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
sudo systemctl enable --now backup.timer
查看状态确认生效:sudo systemctl list-timers --all。inotify是Linux内核的文件系统监控机制,可实时响应文件创建、修改、删除、移动等事件,适合文件上传后自动处理(如图片压缩、日志分析)的场景。
sudo apt-get install inotify-tools
/usr/local/bin/file_monitor.sh,监控/data/uploads目录下的.txt文件创建事件:#!/bin/bash
WATCH_DIR="/data/uploads"
inotifywait -m -e create --format '%f' "$WATCH_DIR" | while read FILE; do
if [[ "$FILE" == *.txt ]]; then
echo "New text file detected: $FILE" | mail -s "File Alert" admin@example.com # 发送邮件通知
# 可替换为其他操作(如调用压缩脚本)
fi
done
/etc/rc.local(需赋予执行权限):sudo chmod +x /etc/rc.local
echo "/usr/local/bin/file_monitor.sh &" | sudo tee -a /etc/rc.local
此时,当/data/uploads目录下有新.txt文件创建时,脚本会自动发送邮件通知。Cron是Linux经典的定时任务工具,适合周期性执行(如每小时清理临时文件、每日报表生成)的场景,配置简单但灵活性较低。
crontab -e添加定时任务(如每天凌晨2点执行备份脚本):0 2 * * * /path/to/your/script.sh # 分 时 日 月 周 命令
chmod +x /path/to/your/script.sh
Cron会自动按配置时间触发任务,日志可通过grep CRON /var/log/syslog查看。YUM(CentOS/RHEL)或DNF(Fedora)的触发器插件,可在软件包安装、更新、删除时自动执行命令,适合依赖软件包变更的自动化操作(如安装Nginx后重启Apache)。
/etc/yum/pluginconf.d/trigger.conf,启用插件:[main]
enabled=1 # 开启触发器功能
/etc/yum/pluginconf.d/trigger.conf中添加规则(如安装Nginx时重启Apache):[trigger]
name=nginx_restart_trigger
command=/usr/bin/systemctl restart httpd # 触发执行的命令
packages=nginx # 触发条件:安装/更新nginx时
yum trigger nginx_restart_trigger # CentOS/RHEL
dnf trigger nginx_restart_trigger # Fedora
通过Python、Bash等编程语言编写自定义触发器,适合复杂逻辑(如多条件组合判断、网络请求触发)的场景。
/usr/local/bin/python_trigger.py,每分钟检查磁盘空间,超过阈值时发送警报:import os
import time
import shutil
LOGFILE = "/var/log/python_trigger.log"
THRESHOLD = 80 # 磁盘使用率阈值(%)
while True:
usage = shutil.disk_usage("/").percent
if usage > THRESHOLD:
with open(LOGFILE, "a") as f:
f.write(f"{time.ctime()} - Disk usage exceeded {THRESHOLD}% ({usage}%)\n")
# 可替换为邮件/短信通知逻辑
time.sleep(60) # 每分钟检查一次
设置执行权限并运行:chmod +x /usr/local/bin/python_trigger.py
nohup /usr/local/bin/python_trigger.py > /dev/null 2>&1 &
sudo。/var/log/trigger.log),便于排查问题。