2014-09-30 4 views
0

Я запускаю приложение Rails 3.2.18 на AWS. Это приложение развертывается с использованием Capistrano, включая запуск Resque для приложения.Запуск команды Capistrano при запуске экземпляра

Моя проблема заключается в том, что AWS может иногда перезапускать экземпляры с незначительным предупреждением или экземпляр может быть перезапущен с консоли AWS. Когда это произойдет, Resque не запускается, как это происходит во время нашего обычного процесса развертывания.

Я попытался создать сценарий оболочки в /etc/init.d, чтобы запустить Resque при загрузке, но этот скрипт продолжает запрашивать пароль, и я не уверен, что мне не хватает. Суть запуска скрипта:

/bin/su -l deploy-user -c "/www/apps/deploy-user/current && bundle exec cap <environment> resque:scheduler:start resque:start" 

Очевидно вышеприведенной команда работает, как ожидалось при запуске в качестве пользователя «развернуть» с Баш строки, но при запуске через sudo /etc/init.d/resque start, он запрашивает пароль при запустив первый Капистрано.

Есть ли что-то вопиющее, что мне не хватает? Или, может быть, есть лучший способ сделать это?

ответ

0

Вы должны запустить су с параметром -c, чтобы задать команды, и приложить все команды в двойные кавычки:

/bin/su -l deploy-user -c "/www/apps/deploy-user/current && bundle exec cap <environment> resque:scheduler:start resque:start" 

Конечно, у вас есть другие альтернативы, как /etc/rc.local.

Но если вы собираетесь использовать скрипт init.d, я бы предложил создать его с помощью propperly (по крайней мере, start/stop, default runlevels ...). В противном случае я бы с /etc/rc.local или даже с хронами для развертывания пользователя:

@reboot /www/apps/deploy-user/current && bundle exec cap <environment> resque:scheduler:start resque:start 
+0

Ах, я скопировал старую команду, а не тот, который на самом деле вызвал вопрос. Я использую флаг '-c', и он все еще не работает. Я обновил вопрос. – CDub

Смежные вопросы