アプリケーションをAWS EC2にデプロイしました。インスタンスを再起動した場合、またはNginxウェブサーバーがダウンした場合に自動で再起動する自動化を実装したいと思います。私はこれからどこから始めればよいのか本当にわかりません。
Crontabを使用して自動監視をスケジュールでき、ダウンしている場合は、電子メールアラートを送信してWebサーバーを再起動できると聞きました。
このような状況に対処することを目的としたmonitを使用してください。
apt install monit
nano /etc/monit/conf.d/nginx.conf
このファイル内にコンテンツを配置し、monitを再起動します
check process nginx with pidfile /var/run/nginx.pid
start program = "/usr/sbin/service nginx start"
stop program = "/usr/sbin/service nginx stop"
これはSystemDの機能です。 systemctl edit nginx
を実行してNGINXの既存のユニットファイルを上書きし、次に貼り付けます。
[Service]
Restart=always
保存する。
たとえば、NGINXがダウンした場合OOMキラー、死んだ後に再起動されます。 NGINXで構成エラーが発生した場合、もちろん再起動されません。
この構成を確認します。 systemctl start nginx
でNGINXサービスを開始し、systemctl status nginx
で実行されていることを確認します。
pkill -f nginx
を使用して強制終了します。 NGINXがsystemctl status nginx
を使用して実行されていることを確認します。
あなたはすでにそれを行う方法について多くの答えを持っていますが、私はそれを最初にシャットダウンさせるために何が起こっているのかを調査し、それを修正します。
Nginxがクラッシュすると、現在実行中のすべてのリクエストは不明な状態で終了します。ファイルは半分転送され、API呼び出しは応答されません。原則として、最上位のアプリケーションはこれに対処する必要がありますが、実際にはめったに行いませんが、その層では、奇妙で再現不可能な動作として現れ、サービスを使用している人々に不安定感を与えます(当然ですが)。
実際にはかなりシンプルです
/ lib/systemd/systemに移動します_Sudo cp ngnix.service ngnix.service.old
_を使用してngnix systemdユニット(場合)をバックアップします
Ngnix.serviceのサービスブロックの末尾に次の2行を追加します
_Restart=on-failure
RestartSec=5s
_
_Sudo systemctl daemon-reload
_で新しい設定をロードします
テストするには-ngnixを殺してみましょう
_cat /var/run/nginx.pid
_はPIDを提供します
_Sudo kill -9 PID
_はnginixを強制終了します
PIDを確認すると、別のPIDがあることがわかります。これらの行を実行していない場合、ngnixを強制終了すると、サーバーがダウンします。これはonly正常でないシャットダウン時に再起動をトリガーします
質問のタイトルで言ったようにプロセスを再開したい場合、他のすべての答えは素晴らしいようです。質問の本文で言ったようにインスタンスを再起動する場合は、Auto Scalingグループを使用できます。
Auto Scalingグループを最小と最大の1つのインスタンスで設定し、ヘルスチェックでNginxウェブサーバーが提供するコンテンツ(理想的には、robots.txtのようにCPUを大量に消費しないもの)にポイントします。 Auto Scalingグループは、インスタンスが正常でないことを検出し(3または5のヘルスチェックに失敗する可能性があります)、インスタンスを強制終了し、新しいインスタンスを開始します。
(インスタンスが実際に破棄されるため)インスタンスに保存されているすべての状態が失われることに注意してください。とにかく、サーバー内で状態を維持することは、クラウドのアンチパターンです。キャッシュも失われます。