Centos

Ansible shell 命令在應該成功時在 sudo 下失敗

  • May 16, 2016

我有一個基於https://github.com/al3x/sovereign/blob/master/roles/tarsnap/tasks/tarsnap.yml#L2的 Ansible 任務,當它應該成功時卻一直失敗。

我曾經使用 執行該角色ansible_ssh_user=root,但最近切換到使用具有無密碼 sudo 權限的非 root 使用者,然後呼叫become我的劇本。

然而,現在 Ansible 任務失敗了,即使我已經指定了become=true. Tarsnap 已經安裝,但任務仍然返回stderr: /bin/sh: tarsnap: command not found。我認為這是因為sudo我不太了解周圍的事情。

當我以該非 root 使用者身份手動 ssh 進入伺服器並執行sudo tarsnap --version | grep 1.0.35 --color=never時,我得到sudo: tarsnap: command not found. 但如果我以 root 身份登錄 SSH,同樣的命令會給我tarsnap 1.0.35. 同樣,當我執行sudo -i tarsnap --version | grep 1.0.35 --color=never(注意**-i**)時,我得到tarsnap 1.0.35.

我正在使用 CentOS 7。

sudo1)為什麼vs的結果不同sudo -i

  1. 如何修復我的 Ansible 任務?

指向具有完全限定路徑的 tarsnap,或顯式設置 PATH 以便它可以找到 tarsnap。您可以通過以 root 身份登錄並執行which tarsnap

你沒有提到你正在使用什麼風格的 Linux,所以請記住 /bin/sh 可能與 /bin/bash 不同(例如 ~/.bashrc 和 ~/.bash_profile 可能無法讀取)。

sudo -i會給你一個“互動式”外殼。您應該查看 bash 的手冊頁(如果您確實在使用 bash)來了解“互動式means (ie. which files are consulted). I think you'll find thatsudo -i will read in ~/.bashrc, while justsudo -i”(without不會做什麼。

引用自:https://serverfault.com/questions/695458