Node.jsをデーモンとして実行するようにサーバーを構成しています。ノードの起動とシャットダウンを処理するようにUpstartを設定しました。次のステップは、node.jsが停止した場合に再起動することです。 ガイド のいくつかは、プロセスを監視するために Monit (または Fugue )を使用することを提案しています(Monitの場合、サーバーにHTTPリクエストを実行することにより)と応答を待っています)。
私はMonitやFugueのようなものを使用して満足していますが、Upstartの respawn機能 を使用しない(または使用できない)理由がわかりません。 Upstartは起動されたプロセスのPIDを監視し、プロセスが停止した場合は再び開始することを想定しています。 MonitまたはFugueは、Upstartが提供しないことを何に提供しますか?
UpstartはPIDをチェックするだけなので、実際にリクエストを行うMonitのようなツールは、アプリの健全性の答えをより忠実に提供します。プロセスは正常に動作している可能性がありますが、何らかの方法でスタックしているため、リクエストを処理できません。
Monit AND upstartの両方を使用することを強くお勧めします。 Upstartはnode.jsのデーモン化を簡単にし、Monitにはメモリ使用量、httpリクエスト、cpu使用量などの多数の便利なアプリチェックが付属しています...
これは、取得できる最も基本的な設定の例です。 PIDファイルと監視プロセスの統計を使用して、別のモニター構成を(同じ開始スクリプトと停止スクリプトで)簡単に追加することもできます。
以下の構成では、すべてが正常である場合にステータス200で応答するだけの簡単なローカルのみのリクエストハンドラーをアプリに作成します。
check Host app_name with address 127.0.0.1
start "/sbin/start app_name"
stop "/sbin/stop app_name"
if failed port 80 protocol HTTP
request /ok
with timeout 5 seconds
then restart
description "app_name"
start on startup
stop on shutdown
script
# Node needs HOME to be set
export HOME="path/to/node/app"
exec Sudo -u nodejs /usr/local/bin/node path/to/node/app/server.js production 2>>/var/log/app_name.error.log >>/var/log/app_name.log
end script