我有一个基于的 Ansible 任务https://github.com/al3x/sovereign/blob/master/roles/tarsnap/tasks/tarsnap.yml#L2当它应该成功时却不断失败。
我曾经使用 来运行该角色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
(请注意-我),我明白了tarsnap 1.0.35
。
我正在使用 CentOS 7。
1)为什么sudo
vs 的结果不同sudo -i
?
2)如何修复我的 Ansible 任务?
答案1
使用完全限定路径指向 tarsnap,或明确设置 PATH 以便可以找到 tarsnap。您可以通过以 root 身份登录并执行来找到缺少的路径元素which tarsnap
您没有提到您正在使用什么版本的 Linux,所以请记住 /bin/sh 可能与 /bin/bash 不一样(例如 ~/.bashrc 和 ~/.bash_profile 可能无法读取)。
sudo -i
将为您提供一个“交互式”shell。您应该查看 bash 的手册页(如果您确实在使用 bash)以了解“交互式means (ie. which files are consulted). I think you'll find that
sudo -i will read in ~/.bashrc, while just
sudo (without
-i”不会做什么。