概念澄清
在 CentOS 环境中,大家口中的“Trigger”通常有三种不同含义:一是某些教程里提到的第三方命令行工具 centos-trigger(用于按间隔执行脚本);二是 yum/dnf 的触发器机制(包安装、更新、删除时自动执行脚本);三是 systemd 的定时器/事件触发(在特定时间或单元状态变化时执行服务)。下面分别给出可操作的使用方法。
方案一 使用 centos-trigger 管理定时任务
- 适用场景:希望通过简单命令按固定间隔运行脚本或程序。
- 安装与基础用法(以 CentOS 7 为例,需 EPEL):
- 安装
- sudo yum install -y epel-release
- sudo yum install -y centos-trigger
- 创建任务(每隔 3600 秒执行脚本)
- sudo ct-create --name my_task --interval 3600 --command “/path/to/my_script.sh”
- 常用命令
- 查看:sudo ct-list
- 启动:sudo ct-start my_task
- 停止:sudo ct-stop my_task
- 删除:sudo ct-delete my_task
- 日志:sudo ct-log my_task
- 说明
- 该工具并非 CentOS 官方标准组件,命令与选项可能随版本变化;使用前建议先查阅工具自带帮助或文档。若系统提示找不到命令,请确认仓库与安装是否成功。
方案二 使用 yum 或 dnf 的触发器
- 适用场景:在包被安装、更新或删除时自动执行自定义脚本(如清理、迁移、通知)。
- 基本用法
- 安装/更新/删除包时,包管理器会自动执行与该包关联的触发器;无需额外命令。
- sudo yum install <package_name>
- sudo yum update <package_name>
- sudo yum remove <package_name>
- 或使用 dnf 的同名命令
- 自定义触发器(示例)
- 安装插件(如可用):sudo yum install -y yum-plugin-trigger
- 配置触发器规则(示例路径与内容)
- /etc/yum/pluginconf.d/trigger.conf
- [main]
- [trigger]
- name=example_trigger
- command=/path/to/your/script.sh
- 注意:自定义触发器可能影响系统安全与稳定性,务必充分测试并限制脚本权限。
方案三 使用 systemd 定时器与事件触发
- 适用场景:需要基于时间(如开机后、每小时)或系统事件(服务激活/停用)执行任务,并与 systemd 生态深度集成。
- 步骤
- 创建服务单元(定义要执行的任务)
- /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
- 创建定时器单元(按时间触发)
- /etc/systemd/system/my_service.timer
- [Unit]
- Description=Run My Service Timer
- [Timer]
- OnBootSec=5min
- OnUnitActiveSec=1h
- Persistent=true
- [Install]
- 启用与启动
- sudo systemctl daemon-reload
- sudo systemctl enable --now my_service.timer
- 验证与日志
- 查看定时器:systemctl list-timers --all
- 查看日志:journalctl -u my_service.timer
- 说明
- 这是 systemd 的标准做法,稳定可靠;适合替代传统的 cron 场景,并能与依赖关系、日志、重启策略等原生集成。
如何选择
- 需要“每隔 N 秒/分/小时执行脚本”:优先用 centos-trigger(若可用);更通用、系统原生的是 systemd 定时器 或 cron。
- 需要在“安装/更新/删除软件包时自动执行动作”:使用 yum/dnf 触发器 或相应插件。
- 需要“开机后延迟执行、按固定周期执行、与系统服务联动”:使用 systemd 定时器。