私はしばらくの間この質問をグーグルで検索しましたが、答えを見つけることができません。私の質問は、aws Elastic-beanstalkサーバーにnodejsアプリケーションをデプロイしているときに、アプリケーションがクラッシュした場合にnodejsアプリケーションを自動的に再起動することを望んでいます。
実際には、 forever など、コマンドラインでこれをサポートしているnodejsパッケージはほとんどありませんが、コンソール管理またはawscliからこのパッケージをインストールして実行し、自動的に再起動する簡単な方法はありません。
Aws ebの再起動の問題をどのように解決しますか?
(2015年3月11日現在)EBが実際にノードを再起動することを確認しました。
確認するために、アプリに非表示のクエリパラメータを追加しました。
if (req.query.testcrash == 'true') {
setTimeout(function(){
undefined.crashMe();
}, 100);
}
次に、ログで例外が発生したこと、およびアプリが再起動されたことを確認しました。
参考のために:
Package.jsonに永久に追加して、自動的にインストールされるようにします。次に、EBコンソールの構成で、カスタムノードコマンドを実行します。
node_modules/.bin/forever app.js
はい、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
これを少しいじって、実行直後にプロセスを調べた後
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つのターミナルウィンドウを開き、
aws elasticbeanstalk restart-app-server --environment-name my-env
を実行しますps aux | grep python
を実行します(ノードアプリだったので、ノードを探しました)特定の/opt/elasticbeanstalk
スクリプトを見つける
Cronからサーバーを再起動する場合は、これらのコマンドを使用できます。
aws elasticbeanstalk restart-app-server --environment-name my-env