在CentOS系统中,“trigger”(触发器)通常与系统服务自动化、定时任务或事件驱动操作相关。以下是几种常见场景的具体配置步骤:
systemd是CentOS默认的服务管理工具,可通过服务单元文件和定时器单元文件实现触发器功能,适用于服务启动/停止、时间触发等场景。
首先定义需要触发的服务(如my_service.service),文件路径为/etc/systemd/system/。
sudo vi /etc/systemd/system/my_service.service
文件内容示例(以启动一个脚本为例):
[Unit]
Description=My Custom Service
After=network.target # 确保网络就绪后启动
[Service]
ExecStart=/usr/bin/my_service_executable # 替换为实际脚本或程序路径
Restart=on-failure # 失败时自动重启
[Install]
WantedBy=multi-user.target # 设置为多用户模式启动
保存后,重新加载systemd配置:
sudo systemctl daemon-reload
若需基于系统事件(如网络启动、系统启动)触发服务,可创建.trigger文件(如my_service.trigger):
sudo vi /etc/systemd/system/my_service.trigger
内容示例(网络启动后10秒触发):
[Unit]
Description=Trigger for My Custom Service
[Trigger]
OnNetworkUp=* # 网络启动时触发
OnBootSec=10s # 系统启动后10秒触发
[Install]
WantedBy=multi-user.target
启用触发器:
sudo systemctl enable my_service.trigger
若需定时触发(如每小时、每天),需额外创建定时器文件(如my_service.timer):
sudo vi /etc/systemd/system/my_service.timer
内容示例(系统启动后5分钟、每小时触发一次):
[Unit]
Description=Run My Custom Service Timer
[Timer]
OnBootSec=5min # 系统启动后5分钟触发
OnUnitActiveSec=1h # 服务上次激活后1小时再次触发
Persistent=true # 若错过触发时间,下次启动时补执行
[Install]
WantedBy=timers.target
启用并启动定时器:
sudo systemctl enable my_service.timer
sudo systemctl start my_service.timer
sudo systemctl list-units --type=trigger # 查看触发器单元
sudo systemctl list-timers --all # 查看定时器状态
sudo journalctl -u my_service.service # 查看服务日志
sudo journalctl -u my_service.timer # 查看定时器日志
若需简单的周期性任务(如每天凌晨备份),可使用cron工具,无需创建服务单元。
crontab -e
格式为分钟 小时 日期 月份 星期 命令,例如:
# 每天凌晨1点执行备份脚本
0 1 * * * /path/to/backup_script.sh
保存后,cron会自动加载任务。
crontab -l # 查看当前用户的cron任务
若需监控文件/目录变化(如新增、修改文件)并触发操作,可使用inotify-tools工具。
sudo yum install inotify-tools -y
创建脚本(如/path/to/watch_script.sh):
#!/bin/bash
# 监控/path/to/watch目录,文件修改时输出日志
inotifywait -m /path/to/watch -e modify | while read path action file; do
echo "File $file in $path was $action at $(date)" >> /var/log/inotify.log
# 在此处添加自定义操作(如调用其他脚本)
done
赋予执行权限:
chmod +x /path/to/watch_script.sh
/path/to/watch_script.sh # 前台运行(测试用)
# 或后台运行(生产环境)
nohup /path/to/watch_script.sh > /dev/null 2>&1 &
若需在数据库操作(如插入、更新)时触发逻辑,可在MySQL中创建触发器。
mysql -u root -p
示例:在users表插入数据前,自动设置status字段为active:
DELIMITER //
CREATE TRIGGER before_insert_user
BEFORE INSERT ON users
FOR EACH ROW
BEGIN
SET NEW.status = 'active'; -- 自动设置status字段
END;
//
DELIMITER ;
插入测试数据:
INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com');
SELECT * FROM users; # 查看status是否为active
sudo)。journalctl或脚本日志)。cp /etc/systemd/system/my_service.service ~/my_service.service.bak)。根据具体需求选择合适的触发器类型,以上步骤覆盖了CentOS中最常见的触发器配置场景。