当前位置: 首页 > news >正文

Ansible 如何使用 handler 实现服务配置变更后的自动重启?

在 Ansible 中,要实现配置变更后自动重启服务,最稳妥的方式是在 tasks 中通过 notify 通知 handlers,并在 handlers 区块定义重启任务,这样只有当配置实际发生变化时才会触发重启。

先说结论:通过 notify 触发 handlers 是实现幂等性重启的标准做法,避免每次执行 playbook 都无条件重启服务。

  • 适合:生产环境配置管理、服务批量部署
  • 先看:任务执行结果是否标记为 changed
  • 建议:handler 名称与 notify 字符串必须完全一致

环境准备

确保已安装 Ansible 并配置好 SSH 免密登录。创建以下基础文件结构:

project/
├── inventory      # 主机清单
├── site.yml       # Playbook 文件
└── templates/└── nginx.conf.j2 # 配置模板

inventory 文件示例:

[webservers]
192.168.1.10
192.168.1.11

完整配置示例

site.yml playbook 内容:

---
- hosts: webserversbecome: yestasks:- name: Deploy configtemplate:src: templates/nginx.conf.j2dest: /etc/nginx/nginx.confnotify: restart nginxhandlers:- name: restart nginxservice:name: nginxstate: restarted

templates/nginx.conf.j2 模板内容示例(简化版):

worker_processes {{ ansible_processor_vcpus }};
events {worker_connections 1024;
}
http {include /etc/nginx/conf.d/*.conf;
}

执行命令与结果验证

使用以下命令执行 playbook:

ansible-playbook -i inventory site.yml

场景一:配置发生变更(首次执行或修改模板后)

任务状态显示 changed,PLAY RECAP 中 handlers 会被触发:

TASK [Deploy config] ***********************************
changed: [192.168.1.10]RUNNING HANDLER [restart nginx] *********************
changed: [192.168.1.10]PLAY RECAP ********************************************
192.168.1.10 : ok=2    changed=1    unreachable=0    failed=0

场景二:配置无变更(再次执行)

任务状态显示 ok,handler 不会执行:

TASK [Deploy config] ***********************************
ok: [192.168.1.10]PLAY RECAP ********************************************
192.168.1.10 : ok=1    changed=0    unreachable=0    failed=0

常见坑

1. 名称拼写错误:notify 与 handler name 不一致导致无法触发,注意大小写和空格。

2. 文件未实际变更:源模板渲染后内容与目标文件完全一致,Ansible 不标记 changed,自然不 notify。

3. 模块选择不当:不要用 command 直接跑 systemctl restart,Ansible 无法感知服务状态,也失去幂等性。

4. 执行时机误解:handler 在整个 play 结束前的 handler flush 阶段统一执行,除非使用 meta: flush_handlers 强制立即执行。

参考文档

  • Ansible Official Docs: Handlers

原文链接:https://www.zjcp.cc/ask/11075.html

http://www.jsqmd.com/news/815844/

相关文章:

  • 从‘上升气泡’案例出发,手把手复现COMSOL两相流水平集法完整仿真流程
  • 手把手教你读懂MIPI CPHY那‘神秘’的三线系统:从线态变化到16bit数据恢复全流程拆解
  • 2026LinkedIn获客好友邀请受限怎么办?安全获客与防封的6个技巧
  • 知识图谱驱动测试用例生成,告别低效!
  • 2026年杭州酒店行业观察:曼纳德国际酒店以品质服务引领杭州住宿体验升级 - 速递信息
  • 电脑突然黑屏了怎么办
  • AI驱动的代码安全守护:clawguardian如何革新软件安全实践
  • 金蝶软件服务商选购指南:如何选到适配企业需求的服务商 - 速递信息
  • ubuntu 系统初始化添加仓库源
  • 【2024精酿AI视觉趋势报告】:全球TOP50酒厂Midjourney印相落地数据首次披露,仅开放72小时下载
  • 2026深圳名牌手表回收优质门店排行榜,收的顶口碑排名靠前 - 奢侈品回收测评
  • 高效运维更省心!2026次氯酸钠发生器厂家推荐排行 合规达标/高效运维榜 - 极欧测评
  • GD32F450移植LVGL v8.3跑飞?别慌,手把手教你用Keil调试定位HardFault(附堆栈调整实战)
  • 2026 济南名包回收权威排名:口碑商家与市场标准解析 - 奢侈品回收测评
  • 深度解析 A-09 语音处理模块:硬件级消回声降噪,5 分钟搞定全场景通话音质升级
  • 深入理解 Vite 的打包机制
  • 2026年首选:智能体融入流程管理,支持BPA体系的高效BPM系统 - 品牌种草官
  • LeetCodeHot100|图、994.腐烂的橘子、207.课程表、208.实现Trie前缀树
  • 深度解析:TDengine 与 Apache Ignite 在实时数据处理中的定位差异
  • 国内气体涡轮流量计厂家核心技术能力排行 - 速递信息
  • 郑州家电维修选哪家?20年以上连锁品牌推荐指南 - 新闻快传
  • 济南劳力士回收找哪家?30年老店告诉你答案 - 奢侈品回收测评
  • 不同规模团队怎么选项目管理软件?8款实测汇总
  • 基于pyverilog的Verilog代码自动化分析与网表提取实战
  • 杭州临安浩雪制冷电器:杭州螺杆机回收推荐几家 - LYL仔仔
  • 2026贝赛思备考机构怎么选?升学备考集训辅导机构全攻略 - 品牌2026
  • 2026桁架控制器厂家哪家靠谱?专业运动控制,支持手持控制器配套 - 品牌推荐大师
  • TPT中实现等价类测试:提升汽车ECU测试效率与覆盖率
  • Linux RX报文处理全流程解析
  • 小白程序员必看:一文搞懂AI Agent,让你的大模型“主动做事”并学会收藏!