Ansible怎么配置重试直到条件满足until和retries机制

星雪同学_7546

星雪同学_7546

2026-10-06

358人浏览

原创

until是轮询等待而非失败重试,反复执行任务直至条件为真或超时;retries是模块内瞬时错误的自动重试机制,仅对uri等少数模块生效;二者功能不同且互不依赖。

ansible怎么配置重试直到条件满足until和retries机制

until 循环不是重试,是轮询等待

很多人看到 until 就以为是“失败后重试”,其实它和 retries 完全不是一回事。until 的作用是:**反复执行一个任务,直到某个条件为真(或超时)才停止**,不管每次执行是否成功。它不关心任务本身报错,只看 register 变量里你定义的判断逻辑。

典型场景是等服务端口就绪、文件生成、进程启动完成。比如用 command 检查 curl -I http://localhost:8080 返回码,直到返回 200 才继续。

  • until 必须配合 register 和 delay/retries 参数使用,否则会无限循环
  • retries 在 until 里表示最多轮询多少次,不是“失败重试次数”
  • delay 是每次轮询间隔秒数,别设成 0,否则可能压垮目标服务
  • 如果某次执行本身失败(比如命令不存在、权限拒绝),until 会直接中断,不会等到 retries 耗尽
- name: wait for app port to be ready
  uri:
    url: http://localhost:8080/health
    status_code: 200
  register: health_check
  until: health_check.status == 200
  retries: 12
  delay: 5

retries 是模块级重试,只对部分模块生效

retries 不是全局配置,它只在少数支持该参数的模块中起作用,比如 uri、wait_for、get_url、pip 等。它和 until 无关,也不依赖 register —— 它是在单次任务执行内部,由模块自己控制的底层重试逻辑。

例如 uri 模块加了 retries: 3,意思是:哪怕第一次 HTTP 请求因网络抖动失败,模块内部会自动再发 2 次请求,只要有一次成功,整个任务就标为 ok;如果三次都失败,才报 failed。

  • retries 对 shell、command、yum 等绝大多数模块无效,写了也白写
  • 它不改变任务逻辑,只是让模块“多试几次”,适合解决瞬时性错误(如 DNS 解析慢、连接拒绝)
  • 不能替代幂等设计:如果第一次执行已写入半截配置,重试可能造成重复或冲突

真正需要“失败后重试任务”的场景,得靠 playbook 控制流

Ansible 没有内置的“任务失败自动重试 N 次”机制。如果你希望某个关键步骤(比如上传证书、调用外部 API)失败后重试 3 次再彻底放弃,必须手动组合 ignore_errors + register + until + 条件判断。

Vidu Claw
Vidu Claw

一款AI视频创作工具,主要用于Vidu AI打造的多模态AI视频创作智能体,内置Vidu Skills,支持OpenClaw调用,适合需要提升相关任务效率的用户。

下载

本质是把“重试逻辑”显式写进 playbook:先执行,捕获结果;若失败,延迟后重新执行;直到成功或达到上限。

  • 不要用 shell + until 写 bash 风格循环,那会失去 Ansible 的状态追踪和幂等性
  • 避免在 until 中调用耗时长或副作用强的操作(如重启服务),容易卡住或引发雪崩
  • 如果重试依赖外部状态(如第三方服务可用性),建议加 timeout 参数防死等
- name: retry upload cert with backoff
  shell: scp /tmp/cert.pem user@target:/etc/ssl/
  register: upload_result
  ignore_errors: true
  until: upload_result.rc == 0
  retries: 3
  delay: "{{ 2 ** (ansible_loop.index0 | int) }}"  # 指数退避

retry_files_enabled 和 .retry 文件不是一回事

别被名字误导:retry_files_enabled 是控制 Ansible 是否生成 playbook.retry 这类主机清单文件的开关,和任务级重试完全无关。它只影响 playbook 执行失败后,是否记录哪些主机没跑完。

这个文件不会触发任何重试动作,也不会重跑失败的任务 —— 它只是个纯文本主机列表,必须手动配合 --limit @site.retry 才能定向重试。它不保存任务名、不记录错误原因、也不支持跳过已成功步骤(除非你额外加 --start-at-task)。

  • 默认开启,设为 False 可禁用,避免 clutter 当前目录
  • 生成的 .retry 文件内容不可编辑,改了也没用;它只读取主机名,不解析格式
  • 如果 inventory 用了动态脚本或 YAML 锚点,.retry 文件里的主机名可能和实际不一致

真正难处理的是跨任务依赖和状态残留。比如一个任务创建了临时目录,下个任务失败退出,重试时得先清理再重来 —— 这种逻辑没法靠 until 或 retries 自动解决,得靠你写清楚 cleanup handler 或前置检查。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux配置 linux shell

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

2026.09.30

80

10

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

2026.09.30

80

14

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

2026.09.30

80

12

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

2026.09.30

60

26

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

2026.09.29

60

15

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

2026.09.23

280

15

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

2026.09.23

160

15

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

2026.09.23

140

15

Conan创建软件包配方指南
Conan创建软件包配方指南

本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

2026.09.22

80

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
尚观shell视频教程
尚观shell视频教程

共8课时 | 1.9万人学习