为什么远程执行 Ansible 时会出现“[Errno 2] 没有这样的文件或目录”, “rc”问题?

为什么远程执行 Ansible 时会出现“[Errno 2] 没有这样的文件或目录”, “rc”问题?

跑步:

- name: get vhosts
  command: rabbitmqctl list_vhosts
  register: vhosts
  changed_when: false

通过发布

sudo ansible-playbook file.yml

结果是:

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}

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


讨论

1.rc命令是否缺失?

rc在本地和远程发布会导致:

bash: rc: command not found...

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


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

"No such file or directory" rc ansible centos在网上查询后发现此问答

根据答案之一问题是由 引起的command。改用shell可以解决问题。已尝试解决方案,但未能解决问题。

答案1

ansible 返回的是 json。打印效果很好:

{
  "changed": false,
  "cmd": "rabbitmqctl list_vhosts",
  "failed": true,
  "msg": "[Errno 2] No such file or directory",
  "rc": 2
}

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

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

答案2

添加become: true到 file.yml:

- hosts:
    - <enter-IP>
  roles:
    - 030.sensu
  become: true

并通过发行运行它ansible-playbook file.yml也解决了该问题。

相关内容