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

Ansible 如何不借助AWX定时调度,等待至指定时间运行playbook

实现方案

完全可以通过Ansible内置模块实现该需求,无需依赖AWX调度或第三方工具,核心使用Ansible自带的pause模块即可实现等待到指定时间再执行后续任务。


核心实现逻辑

  • 预先定义任务执行的目标时间,支持固定写死在playbook中,也支持执行时通过外部参数传入
  • 通过pause模块的条件判断能力,循环校验当前时间是否达到目标时间,未达条件则持续等待
  • 可自定义时间检查间隔,避免频繁校验占用资源

完整playbook示例

---
- name: 夜间更新任务
  hosts: 你的被控节点组
  gather_facts: true
  vars:
    # 目标执行时间,格式为 年-月-日 时:分:秒,也可执行playbook时通过-e参数覆盖
    target_exec_time: "2024-06-15 02:00:00"
    # 时间检查间隔,单位秒,此处设置为每分钟检查一次
    check_interval: 60
    # 最大重试次数,此处设置为1440次即最多等待24小时,覆盖全时段等待需求
    max_retries: 1440

  tasks:
    - name: 等待至预设执行时间
      ansible.builtin.pause:
        seconds: "{{ check_interval }}"
      until: ansible_date_time.epoch | int >= (target_exec_time | to_datetime('%Y-%m-%d %H:%M:%S')).strftime('%s') | int
      retries: "{{ max_retries }}"
      # 该任务在控制端执行,不影响被控节点
      delegate_to: localhost

    # 下方为你实际要执行的更新任务,等时间到了才会开始运行
    - name: 传输大文件到被控节点
      ansible.builtin.copy:
        src: /path/to/your/large/file
        dest: /target/path/on/remote/
        mode: '0644'

    - name: 执行应用更新逻辑
      ansible.builtin.shell: /path/to/update/script.sh
      register: update_result

    - name: 输出更新结果
      ansible.builtin.debug:
        var: update_result.stdout

使用说明

  1. 灵活指定执行时间:无需修改playbook,执行时直接传入目标时间即可,示例命令:
    ansible-playbook night_update.yml -e "target_exec_time='2024-06-16 01:30:00'"
    
  2. 无需指定日期的场景:如果要固定在执行playbook当天的凌晨2点执行,可直接修改目标时间变量为:
    target_exec_time: "{{ '%Y-%m-%d 02:00:00' | strftime }}"
    
  3. 注意事项:请确保Ansible控制端的系统时间准确,避免时间判断出现偏差;等待过程中如需终止任务,按Ctrl+C后再按C即可中断playbook运行。

内容的提问来源于stack exchange,提问作者patrick.schweinsberg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:57:04