У меня есть задача Ansible на основе https://github.com/al3x/sovereign/blob/master/roles/tarsnap/tasks/tarsnap.yml#L2 которая продолжает терпеть неудачу, когда должна быть успешной.
Раньше я выполнял роль с ansible_ssh_user=root
, но недавно перешел на использование пользователя без полномочий root, который имеет права sudo без пароля, а затем вызывает become
в моих пьесах.
Однако теперь задача Ansible не выполняется, хотя я указал become=true
. Tarsnap уже установлен, но задача все равно возвращается stderr: /bin/sh: tarsnap: command not found
. Я думаю это из-за чего-то вокруг sudo
что я не совсем понимаю.
Когда я вручную ssh на сервер как этот пользователь без полномочий root и запускаю sudo tarsnap --version | grep 1.0.35 --color=never
, Я получил sudo: tarsnap: command not found
. Но если я использую SSH как root, эта же команда дает мне tarsnap 1.0.35
. Точно так же, когда я бегу sudo -i tarsnap --version | grep 1.0.35 --color=never
(Обратите внимание -я), Я получил tarsnap 1.0.35
.
Я использую CentOS 7.
1) Почему результаты разные для sudo
против 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
судо -iwill read in ~/.bashrc, while just
судо(without
-i`) не будет.