как автоматически перезапустить приложение узла на aws elastic-beanstalk
я погуглил этот вопрос, но не могу найти ответ. Мой вопрос заключается в том, что при развертывании приложения nodejs на серверах aws elastic-beanstalk я хочу, чтобы приложение nodejs автоматически перезапускалось при сбое приложения.
на самом деле есть несколько пакетов nodejs, которые уже поддерживают это с помощью командной строки, например навсегда, но нет простого способа из console management или awscli установить этот пакет и выполнить его для достижения перезапуска автоматически.
Мне интересно, как вы решаете проблему перезапуска на aws eb?
5 ответов
да, лучше использовать Супервизор, однако для того, чтобы иметь возможность перезапустить сервер приложений с помощью aws console или Beanstalk cli tools, вам нужно поместить собственный обработчик в эластичные крючки beanstalk в каталоге: /opt / elasticbeanstalk / hooks/restartappserver/enact Hook-это скрипт оболочки, python или ruby, который размещен в указанном каталоге. Поместите логику перезапуска супервизора здесь, и вы сможете перезапустить ее с помощью консоли управления, инструментов aws cli (http://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/restart-app-server.html), эластичный Beanstalk api: (http://docs.aws.amazon.com/elasticbeanstalk/latest/APIReference/API_RestartAppServer.html)
Как добавить крюк, установить supervisiord и т. д. Вы можете прочитать здесь: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
Я подтвердил (по состоянию на 11 марта 2015 года), что EB действительно перезапускает узел для вас.
чтобы подтвердить, я добавил скрытый запрос param в мое приложение:
if (req.query.testcrash == 'true') {
setTimeout(function(){
undefined.crashMe();
}, 100);
}
затем проверьте в журнале, что произошло исключение и что мое приложение было перезапущено.
Для справки:
- моя конфигурация EB/EC2 - "64-битная Amazon Linux 2014.09 v1.0.9 запущенный узел.js"
- использование nginx и узла 0.10.31
добавить навсегда в свой пакет.json, поэтому он устанавливается автоматически. Затем в консоли EB в разделе Конфигурация пользовательская команда узла:
node_modules/.bin/forever app.js
Если вы хотите перезапустить сервер из cron, вы можете использовать эти команды.
aws elasticbeanstalk restart-app-server --environment-name my-env
после игры с этим немного и проверки процесса сразу после запуска
aws elasticbeanstalk restart-app-server --environment-name my-env
из комментария @Human Love. Я нашел эти две команды для ручного запуска / остановки процесса, когда ssh в EC2. Не уверен, что они рекомендуются, но для быстрой отладки я нахожу их полезными
# to start the process
python /opt/elasticbeanstalk/containerfiles/ebnode.py --action start-all
# to stop the process
sudo python /opt/elasticbeanstalk/containerfiles/ebnode.py --action stop-all
[Примечание]: это конкретное решение nodejs. Хотя другие типы приложений, вероятно, довольно похожи. Для проверки точная команда. Откройте два окна терминала и
- в первом, run
aws elasticbeanstalk restart-app-server --environment-name my-env
- во втором, бегут
ps aux | grep python
(я захватил узел, потому что это было приложение узла)
чтобы найти конкретный /opt/elasticbeanstalk
скрипт