为什么远程执行Ansible时会出现“[Errno 2] No such file or directory”、“rc”的问题?

030*_*030 10 ansible ansible-playbook

跑步:

- name: get vhosts
  command: rabbitmqctl list_vhosts
  register: vhosts
  changed_when: false
Run Code Online (Sandbox Code Playgroud)

通过发行

sudo ansible-playbook file.yml
Run Code Online (Sandbox Code Playgroud)

结果是:

TASK [030.sensu : get vhosts] **************************************************
fatal: [IP]: FAILED! => {"changed": false, "cmd": "rabbitmqctl list_vhosts", 
"failed": true, "msg": "[Errno 2] No such file or directory", "rc": 2}
Run Code Online (Sandbox Code Playgroud)

如果 ansible 在系统本身上运行,则不会发生此错误。


讨论

1. 是否rc缺少命令?

rc以远程方式在本地发出两者会导致:

bash: rc: command not found...
Run Code Online (Sandbox Code Playgroud)

如果这是一个问题,那么在本地运行剧本也会失败。


2. 这是一个已知问题吗?

"No such file or directory" rc ansible centos在互联网上查询导致了这个问答

根据其中一个答案,该问题是由command. 使用shell反而会解决这个问题。尝试了解决方案,但没有解决问题。

jsc*_*ott 11

ansible 的返回是 json。印刷精美:

{
  "changed": false,
  "cmd": "rabbitmqctl list_vhosts",
  "failed": true,
  "msg": "[Errno 2] No such file or directory",
  "rc": 2
}
Run Code Online (Sandbox Code Playgroud)

您会注意到msg包含“[Errno 2] 没有这样的文件或目录”。取而代之的rc是命令的返回(退出)代码,在您的情况下为“2” rabbitmqctl list_vhosts

在 shell (bash/sh/whatever) 中运行rabbitmqctl. 你可能没有rabbitmqctl安装。或者,正如 EEAA 正确建议的那样,它不在$PATH. 在某些发行版(Debian/Ubuntu)/usr/sbin上,普通用户的路径中不包含,但 root 用户的路径中包含它。

  • ...或者它不在`PATH`中。 (3认同)