Я пытаюсь использовать следующий скрипт Ansible (часть плейбука) для запуска единорога через systemd
для приложения rails на экземпляре EC2 (micro):
---
- name: restart unicorn
command: psql -h {{ db_host }} -U {{ db_user }} -d {{ db }} -c "SELECT true FROM pg_tables WHERE tablename = 'order_cycles';"
register: table_exists
ignore_errors: yes
sudo: yes
sudo_user: "{{ unicorn_user }}"
notify: restart unicorn step 2
#TODO make sure both of these things run as one handler.
- name: restart unicorn step 2
service:
name: unicorn_{{ app }}
state: restarted
when: table_exists.stderr.find('does not exist') == -1
# If unicorn isn't actually started yet we probably need this:
notify: start unicorn
- name: start unicorn
service:
name: unicorn_{{ app }}
state: started
Пользователь, настроенный в playbook, ubuntu
, пользователь по умолчанию (EC2), и я нажимаю Interactive authentication required
ошибка там, поэтому я просто пытаюсь устранить неполадки непосредственно в командной строке сервера развертывания и наткнулся на это препятствие.
Я могу запустить его как sudo:
$ sudo systemctl start unicorn_myapp.service
Либо напрямую через командную строку сервера, либо с помощью Необработанный Ansible метод, который успешен.
Но тогда сервер rails, запущенный пользователем ubuntu
не могу получить к нему доступ (по крайней мере, я исследую этот путь по причине .sock failed (111: Connection refused
ошибка).
Если я запустил его без sudo, будет запрошен пароль, но, насколько я могу судить, пользователь EC2 ubuntu работает без пароля.
Я знаю, что можно обойти создать нового пользователя с паролем и запускайте rails и systemctl / unicorn от имени этого пользователя, но я не думаю, что это реальный ответ на эту проблему, тем более что разработчик playbook недавно удалил user_password
из playbook в целом по соображениям безопасности.
Если я пойму, как бежать systemd
как пользователь без полномочий root, возможно, я смогу понять, как добиться успеха с Ansible.
Конечно, также не исключено, что я подхожу к этому с неправильной точки зрения, поскольку я новичок практически во всем, что включает этот сценарий.
Если у вас глобальный sudo, добавьте become: no
для двух задач, для которых не требуется sudo privs.