ansible的异步执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | ansible任务的异步执行 96 茶客furu声 关注 2016.07 . 12 01 : 40 * 字数 458 阅读 1777 评论 0 喜欢 4 ansible方便在于能批量下发,并返回结果和呈现。简单、高效。 但有的任务执行起来却不那么直接,可能会花比较长的时间,甚至可能会比ssh的超时时间还要长。这种情况任务是不是没法执行了? ansible考虑到了这种情况,官方文档介绍了这个问题的解决方法,就是让下发的任务执行的连接变为异步:任务下发之后,长连接不再保持,而是每隔一段时间轮询结果,直到任务结束。 这是官网相关的介绍 他们在playbook的任务中加入两个参数:async和poll。 async参数值代表了这个任务执行时间的上限值。即任务执行所用时间如果超出这个时间,则认为任务失败。此参数若未设置,则为同步执行。 poll参数值代表了任务异步执行时轮询的时间间隔。 官方给出例子: - - - - hosts: all remote_user: root tasks: - name: simulate long running op ( 15 sec), wait for up to 45 sec, poll every 5 sec command: / bin / sleep 15 async: 45 poll: 5 这时候已经不怕任务超时了。可以执行一个 45s 的任务,当然也可以根据需要自己设置。另外,如果poll为 0 ,就相当于一个不关心结果的任务。 如果还想要更方便地看轮询结果,ansible还提供了这个模块async_status。 - - - # Requires ansible 1.8+ - name: 'YUM - fire and forget task' yum: name = docker - io state = installed async: 1000 poll: 0 register: yum_sleeper - name: 'YUM - check on fire and forget task' async_status: jid = {{ yum_sleeper.ansible_job_id }} register: job_result until: job_result.finished retries: 30 第一个job执行异步任务,并且注册了一个名字叫yum_sleeper,用于提供给第二个job作为轮询对象,并且poll设为 0 ,它自己不再轮询。 第二个job使用async_status模块,进行轮询并返回轮询结果。准备检查 30 次。结果如下: PLAY [ all ] * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * TASK [setup] * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ok: [cloudlab001] TASK [YUM - fire and forget task] * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ok: [cloudlab001] TASK [YUM - check on fire and forget task] * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FAILED - RETRYING: TASK: YUM - check on fire and forget task ( 29 retries left). FAILED - RETRYING: TASK: YUM - check on fire and forget task ( 28 retries left). FAILED - RETRYING: TASK: YUM - check on fire and forget task ( 27 retries left). FAILED - RETRYING: TASK: YUM - check on fire and forget task ( 26 retries left). FAILED - RETRYING: TASK: YUM - check on fire and forget task ( 25 retries left). FAILED - RETRYING: TASK: YUM - check on fire and forget task ( 24 retries left). changed: [cloudlab001] PLAY RECAP * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * cloudlab001 : ok = 3 changed = 1 unreachable = 0 failed = 0 |
时来天地皆同力,运去英雄不自由
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!