You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible配置:已执行Chrony重启服务时如何跳过重载源handler

Ansible配置:执行第一个Handler后跳过第二个Handler

你当前的Playbook包含两个Handler:重启Chrony服务、重载Chrony源,需求是当第一个Handler执行后,自动跳过第二个。可以通过设置标记变量+条件判断实现,具体修改如下:

修改后的完整Playbook

- name: 配置NTP
  hosts: jumphost
  become: true
  tasks:
    - name: 卸载不需要的时间同步工具
      apt:
        state: absent
        name:
          - ntp
          - systemd-timesyncd
    - name: 安装Chrony
      apt: state=present name=chrony
    - name: 禁用Debian池服务器
      lineinfile:
        path: /etc/chrony/chrony.conf
        regexp: '^pool.*'
        backrefs: true
        line: '#\g<0>'
      notify: 
        - 重启Chrony服务
        - 标记重载为跳过
    - name: 配置示例NTP服务器
      copy:
        dest: /etc/chrony/sources.d/example.sources
        owner: root
        group: root
        mode: 0644
        content: |
          server ntp.example.de iburst
      notify: 重载Chrony源
  handlers:
    - name: 标记重载为跳过
      set_fact:
        skip_chrony_reload: true
    - name: 重启Chrony服务
      service: name=chronyd state=restarted
    - name: 重载Chrony源
      command: chronyc reload sources
      when: not skip_chrony_reload | default(false)

实现逻辑

  1. 新增标记Handler:添加标记重载为跳过的Handler,作用是设置变量skip_chrony_reload为true,标记已执行过重启操作。
  2. 关联通知触发:在触发「重启Chrony服务」的任务中,同时通知这个标记Handler,确保重启操作触发时,标记变量会被设置。
  3. 添加执行条件:给「重载Chrony源」Handler加上when条件,只有当skip_chrony_reload不为true时才执行(default(false)避免变量未定义时出现错误)。

这样设置后,只要「重启Chrony服务」被触发执行,标记变量就会生效,后续重载操作自动跳过;如果只有源文件修改的任务被触发,标记变量不存在,重载操作会正常执行。

内容的提问来源于stack exchange,提问作者ceving

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 19:36:09