0Pricing
DevOps Bootcamp · 课时

Handler 的运行时机与 flush_handlers

控制 Play 结束时 Handler 的执行时机

Handler 的运行时机与 flush_handlers 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。

处理程序在末尾运行

默认情况下,所有收到通知的处理程序都会在剧本的末尾运行一次,也就是所有任务完成之后,而不是收到通知的那一刻。

为何要延后执行

延后执行意味着即使进行了多次配置修改,服务也只会重启一次。这样可以避免在剧本执行过程中不必要地重启,并节省时间。

按主机计算,而非全局计算

处理程序的执行时机是按主机分别跟踪的。每台主机会在剧本结束时运行自己的队列处理程序,彼此互不影响。

延迟重启问题

有时后续任务需要服务已经重启完成。等到剧本结束就太晚了,因此您需要提前刷新队列。

认识 flush_handlers

flush_handlers 元任务会强制所有待处理程序立即运行,也就是在剧本执行到一半时运行。

- name: Run queued handlers now
  ansible.builtin.meta: flush_handlers

它是 meta 任务

flush_handlers 是一种特殊的 meta 操作,用于控制 Ansible 本身,而不是操作远程主机。

典型用法

修改配置,刷新处理程序队列以重启服务,然后针对刚刚重启的服务运行冒烟测试任务。

- name: Update config
  ansible.builtin.template:
    src: app.j2
    dest: /etc/app.conf
  notify: Restart app
- ansible.builtin.meta: flush_handlers
- name: Check health
  ansible.builtin.uri:
    url: http://localhost/health

失败与处理程序

如果主机在剧本结束前失败,其待处理程序通常不会运行。这也是提前刷新队列有时更安全的原因。

将 force_handlers 作为安全保障

在执行流程中将 force_handlers 设置为 true,即使主机随后失败,也会运行已加入队列的处理程序。这对清理性重启很有用。

- hosts: web
  force_handlers: true
  tasks:
    - ...

谨慎刷新队列

只有在执行顺序确实要求时,才使用 flush_handlers。过度使用会失去处理程序带来的批处理优势。

时间线

任务从上到下运行,处理程序在队列中等待,然后它们会在剧本结束时全部触发,除非您更早刷新队列。⏱️

快速检查

您必须在剧本执行过程中重启服务,以便后续任务访问它。应该使用什么?

回顾

处理程序通常会按主机分别在剧本结束时运行一次。使用 flush_handlers 可以提前触发它们,使用 force_handlers 可以让它们在发生失败时仍然运行。🚀

常见问题解答

「Handler 的运行时机与 flush_handlers」课时是免费的吗?

是的 — 「Handler 的运行时机与 flush_handlers」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。

「Handler 的运行时机与 flush_handlers」这节课中我会学到什么?

控制 Play 结束时 Handler 的执行时机 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 DevOps Bootcamp 需要有经验吗?

无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「Handler 的运行时机与 flush_handlers」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 DevOps Bootcamp 课中编写并运行代码吗?

能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 发生更改时通知 Handler
  2. 定义 Handler 与重启模式
  3. Handler 的运行时机与 flush_handlers
  4. Listen:一个触发器,多个 Handler
← 返回 DevOps Bootcamp