Ansible——handlers与notify
handlers
当我们修改了配置文件后,需要重启服务时,可以利用handlers中的tasks。避免不必要的重启。只要等配置文件修改的时候,才会触发handlers。
notify
handlers中的任务无法直接使用,需要通过notify来调用handlers。
注意:
- 调用时根据handlers的名字来确认。所以一个playbook中,handlers的名字一定是唯一的。
- notify用于在每个play的最后被触发。无论通过notify调用几次handlers。系统都会在所有play完成后才执行一次handlers中的任务。
实例:
题目:修改apache配置文件后才重启httpd服务。如果没有改变则不重启。
- 执行playbook发现没有执行handlers,因为模板中的变量并没有发生变化。从而不会触发handlers
[root@localhost project]# vim ceshi2.yml --- - name: handlers vars_files: files/vars hosts: 192.168.190.133 tasks: - template: src: template/vhosts.j2 dest: /etc/httpd/conf.d/vhosts.conf notify: restart apache handlers: - name: restart apache service: name: httpd state: restarted TASK [template] **************************************************************************************** ok: [192.168.190.133] PLAY RECAP ********************************************************************************************* 192.168.190.133 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0
- 修改变量的值
[root@localhost project]# vim files/vars 修改外部变量文件中的端口号 从81变为9528 port_name1: 80 port_name2: 9528 service1_name: web_1 service2_name: web_2
- 再次执行playbook,发现handlers成功执行
[root@localhost project]# ansible-playbook ceshi2.yml ...... RUNNING HANDLER [restart apache] *********************************************************************** changed: [192.168.190.133] PLAY RECAP ********************************************************************************************* 192.168.190.133 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
4.查看被控机的端口号是否改变
[root@localhost project]# ansible 192.168.190.133 -a 'ss -antl' -i inventory 192.168.190.133 | CHANGED | rc=0 >> State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 25 0.0.0.0:514 0.0.0.0:* LISTEN 0 128 *:80 *:* LISTEN 0 128 [::]:22 [::]:* LISTEN 0 128 *:9528 *:* 80与9528端口都被开启 LISTEN 0 25 [::]:514 [::]:*
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用