Назад | Перейти на главную страницу

Ansible зависает при запуске pumactl

У меня есть playbook для установки puma на моем экземпляре ec2, и все в порядке, кроме случаев, когда я запускаю bundle exec pumactl start в конце он запускает сервер, но playbook зависает на неопределенное время.

Вот задача Ansible -

 - shell: /home/ubuntu/.rbenv/shims/bundle exec pumactl start
   args: 
     chdir: /home/{{ user }}/{{ app_name }}
     warn: no

Есть ли способ избежать этого?

Обновить

Я добавил это в свой /etc/systemd/system/puma.service файл и запустил его с помощью systemd, как предложил @Michael -

[Unit]
Description=Puma Rails Server
After=network.target

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/my_app
ExecStart=/bin/bash -lc '/home/ubuntu/.rbenv/shims/bundle exec puma -C /home/ubuntu/my_app/config/puma.rb'
ExecStop=/bin/bash -lc '/home/ubuntu/.rbenv/shims/bundle exec pumactl -S /home/ubuntu/my_app/shared/pids/puma.state stop'
TimeoutSec=15
Restart=always

[Install]
WantedBy=multi-user.target

Вы забыли демонизировать puma, поэтому она работает на переднем плане. Ansible ждал его выхода. Добавить -d параметр к команде.

А еще лучше вам следует создать модуль systemd для запуска puma как службы, а потом запустить эту службу. В этом случае демонизация не требуется, поскольку systemd справится со всем.

Кстати, лучше всего использовать command вместо того shell если вам действительно не нужна обработка оболочки (что в данном случае вам не нужно).