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

如何触发Ansible任务输出`failed: [server]`?为何测试仅得`fatal:`?

Ansible中failed:与fatal:日志的区别及触发原因

先明确这两种日志的核心差异:

  • failed::任务成功调用并执行了目标模块,但模块自身返回了失败状态(比如命令执行返回非零码、文件操作权限不足),属于任务级别的失败,Ansible默认会继续执行后续任务(除非配置了终止规则)。
  • fatal::Ansible在执行任务过程中遇到了无法完成模块执行的严重问题,直接中断当前任务/play的执行,属于流程级别的致命错误。

你测试时只看到fatal:的原因,对应不同场景分析:

  1. 使用ansible.builtin.fail模块:这个模块的设计目的就是主动触发致命错误,强制终止执行,所以必然输出fatal:,这是预期行为。
  2. 调用/bin/false或exit 1却输出fatal::大概率是你的测试场景存在其他问题,比如:
    • 目标主机连接失败:SSH连不上时,还没执行命令就会先抛出fatal: [server] => {"msg": "Failed to connect to the host via ssh: ..."}
    • 任务配置错误:比如模块名拼写错误(把command写成commmand),导致Ansible找不到模块,直接输出fatal:
    • 全局配置影响:如果在playbook或ansible.cfg中设置了any_errors_fatal: yes,所有failed:的任务都会被升级为fatal:,直接终止后续执行
    • 错误的任务写法:比如把命令写到了错误的字段里,导致任务解析失败

正常情况下,用command或shell模块执行/bin/false或exit 1,应该输出failed:,比如这个测试playbook:

- name: Test failed task
  hosts: server
  tasks:
    - name: Execute /bin/false
      ansible.builtin.command: /bin/false

执行后会得到类似这样的日志:

failed: [server] => {"changed": false, "cmd": ["/bin/false"], "rc": 1, "msg": "non-zero return code"}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 13:21:04