我有一个Ansible任务基于https://github.com/al3x/sovereign/blob/master/roles/tarsnap/tasks/tarsnap.yml#L2 ,它应该保持失败,当它应该成功。
我曾经用ansible_ssh_user=root来运行这个angular色,但最近却转而使用了一个拥有无密码sudo权限的非root用户,然后在我的剧本中调用become了。
然而,即使我已经指定了become=true ,Ansible任务失败了。 已经安装了Tarsnap,但仍然返回stderr: /bin/sh: tarsnap: command not found 。 我想这是因为sudo的东西,我不明白。
当我手动ssh进入服务器作为这个非root用户,并运行sudo tarsnap --version | grep 1.0.35 --color=never sudo tarsnap --version | grep 1.0.35 --color=never ,我得到sudo: tarsnap: command not found 。 但是,如果我以root tarsnap 1.0.35 SSH,那么同样的命令会给我tarsnap 1.0.35 。 同样,当我运行sudo -i tarsnap --version | grep 1.0.35 --color=never sudo -i tarsnap --version | grep 1.0.35 --color=never (注意-i ),我得到了tarsnap 1.0.35 。
我正在使用CentOS 7。
1)为什么sudo和sudo -i的结果不一样?
2)我如何解决我的Ansible任务?
指向具有完全限定path的tarsnap,或者明确设置PATH以便findtarsnap。 您可以通过以root身份login并执行which tarsnap来find缺less的path元素
你没有提到你正在使用什么样的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 means (ie. which files are consulted). I think you'll find that sudo -i will read in ~/.bashrc, while just sudo (without -i`)不会。