web-dev-qa-db-ja.com

awselastic-beanstalkでノードアプリケーションを自動的に再起動する方法

私はしばらくの間この質問をグーグルで検索しましたが、答えを見つけることができません。私の質問は、aws Elastic-beanstalkサーバーにnodejsアプリケーションをデプロイしているときに、アプリケーションがクラッシュした場合にnodejsアプリケーションを自動的に再起動することを望んでいます。

実際には、 forever など、コマンドラインでこれをサポートしているnodejsパッケージはほとんどありませんが、コンソール管理またはawscliからこのパッケージをインストールして実行し、自動的に再起動する簡単な方法はありません。

Aws ebの再起動の問題をどのように解決しますか?

19
HolaMan

(2015年3月11日現在)EBが実際にノードを再起動することを確認しました。

確認するために、アプリに非表示のクエリパラメータを追加しました。

if (req.query.testcrash == 'true') {
    setTimeout(function(){
        undefined.crashMe();
    }, 100);
}

次に、ログで例外が発生したこと、およびアプリが再起動されたことを確認しました。

参考のために:

  • 私のEB/EC2設定は、「Node.jsを実行している64ビットAmazon Linux 2014.09v1.0.9」です。
  • Nginxとノード0.10.31を使用する
31
ryanman

Package.jsonに永久に追加して、自動的にインストールされるようにします。次に、EBコンソールの構成で、カスタムノードコマンドを実行します。

node_modules/.bin/forever app.js
9
davychiu

はい、Supervisorを使用する方が良いオプションですが、awsコンソールまたはbeanstalk cliツールを使用してアプリサーバーを再起動できるようにするには、ディレクトリ内のElastic Beanstalkフックに独自のハンドラーを配置する必要があります:/ opt/elasticbeanstalk/hooks/restartappserver/enact Hook is Shell、pythonまたはRubyスクリプトは上記のディレクトリに配置されました。ここにsupervisordrestartのロジックを配置すると、ヘルプを使用して再起動できます。管理コンソールのawscliツール( http://docs.aws.Amazon.com/cli/latest/reference/elasticbeanstalk/restart-app-server.html )、elastic 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

3
Vadym Fedorov

これを少しいじって、実行直後にプロセスを調べた後

aws elasticbeanstalk restart-app-server --environment-name my-env

@HumanLoveのコメントから。 EC2にSSH接続したときにプロセスを手動で開始/停止するためのこれらの2つのコマンドを見つけました。これらが推奨されているかどうかはわかりませんが、すばやくデバッグするには便利です

# 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固有のソリューションです。他のアプリケーションタイプはおそらくかなり似ていますが。正確なコマンドを検査します。 2つのターミナルウィンドウを開き、

  1. 最初に、aws elasticbeanstalk restart-app-server --environment-name my-envを実行します
  2. 2番目に、ps aux | grep pythonを実行します(ノードアプリだったので、ノードを探しました)

特定の/opt/elasticbeanstalkスクリプトを見つける

2
Jeremy

Cronからサーバーを再起動する場合は、これらのコマンドを使用できます。

aws elasticbeanstalk restart-app-server --environment-name my-env

参照

1
Ali Nouman