Ansible shell 命令在應該成功時在 sudo 下失敗
我有一個基於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。
sudo
1)為什麼vs的結果不同sudo -i
?
- 如何修復我的 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 that
sudo -iwill read in ~/.bashrc, while just
sudo -i”(without
不會做什麼。