У меня есть 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
если вам действительно не нужна обработка оболочки (что в данном случае вам не нужно).