我有一个基于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
?
2) 如何修复我的 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
不会做什么。