Ubuntu Trigger实用场景分类及具体应用
systemd服务单元与触发器文件,实现系统启动时自动运行关键服务(如数据库、Web服务器),或关闭时执行清理任务(如删除临时文件、备份日志)。例如,创建/etc/systemd/system/start_services.trigger文件,定义Operation=start事件,关联启动服务的脚本,确保系统启动后自动初始化所需服务。cron定时调度功能,实现周期性系统维护(如日志轮转、磁盘空间检查、软件更新)。例如,编辑crontab -e添加0 3 * * * /usr/bin/logrotate /etc/logrotate.conf,每天凌晨3点自动轮转系统日志,避免日志文件过大占用磁盘空间。inotifywait工具(属于inotify-tools包)监控指定目录的文件变化(创建、修改、删除),触发相应动作。例如,监控/home/user/documents目录,当创建包含“report”的文件时,自动发送邮件通知或备份文件。示例脚本:#!/bin/bash
WATCH_DIR="/home/user/documents"
inotifywait -m -e create --format '%f' "$WATCH_DIR" | while read FILE; do
if [[ "$FILE" == *"report"* ]]; then
echo "New report detected: $FILE" | mail -s "Report Alert" user@example.com
fi
done
适用于实时数据处理、文档生成等场景。smartctl工具监控硬盘健康状态,当检测到坏道时自动发送邮件通知管理员。/etc/profile、~/.bash_profile或systemd用户服务,在用户登录时执行个性化设置(如加载环境变量、启动应用),或在注销时清理临时文件、记录登录日志。例如,在~/.bash_profile中添加source ~/.bashrc加载自定义环境变量,或在/etc/profile.d/cleanup.sh中添加rm -rf /tmp/*清理临时文件。NetworkManager的dispatcher.d脚本,在连接WiFi时自动挂载远程共享文件夹或切换代理设置。示例脚本:#!/bin/bash
if [ "$2" = "up" ]; then
mount -t cifs //server/share /mnt/share -o username=user,password=pass
fi
适用于移动办公、网络环境切换等场景。dpkg的postinst(安装后)和postrm(卸载后)脚本,实现软件安装后的自动配置(如启动服务、创建桌面快捷方式)或卸载后的清理(如删除配置文件、恢复系统状态)。例如,postinst脚本中添加systemctl enable my_service启动服务,postrm脚本中添加rm -rf /etc/my_app清理配置文件。auditd监控/etc/ssh/sshd_config文件的修改,当检测到未经授权的更改时,自动恢复默认配置并发送邮件通知管理员。docker events命令监控容器状态,当容器启动时自动收集容器日志并上传到日志服务器。示例命令:docker events --filter 'event=start' --format '{{.ID}}' | while read CONTAINER_ID; do
docker logs "$CONTAINER_ID" > "/var/log/containers/${CONTAINER_ID}.log"
done
适用于容器化应用的管理、监控等场景。Trigger组件,监听GitHub的push事件,触发构建Pipeline(如编译代码、运行测试、推送镜像到镜像仓库),实现“代码提交即部署”的DevOps流程。