как автоматически перезапустить приложение узла на 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. Хотя другие типы приложений, вероятно, довольно похожи. Для проверки точная команда. Откройте два окна терминала и

  1. в первом, run aws elasticbeanstalk restart-app-server --environment-name my-env
  2. во втором, бегут ps aux | grep python (я захватил узел, потому что это было приложение узла)

чтобы найти конкретный /opt/elasticbeanstalk скрипт