web-dev-qa-db-ja.com

基本的なUp​​startセットアップの代わりにMonitを使用する利点はありますか?

Node.jsをデーモンとして実行するようにサーバーを構成しています。ノードの起動とシャットダウンを処理するようにUpstartを設定しました。次のステップは、node.jsが停止した場合に再起動することです。 ガイド のいくつかは、プロセスを監視するために Monit (または Fugue )を使用することを提案しています(Monitの場合、サーバーにHTTPリクエストを実行することにより)と応答を待っています)。

私はMonitやFugueのようなものを使用して満足していますが、Upstartの respawn機能 を使用しない(または使用できない)理由がわかりません。 Upstartは起動されたプロセスのPIDを監視し、プロセスが停止した場合は再び開始することを想定しています。 MonitまたはFugueは、Upstartが提供しないことを何に提供しますか?

53
James Gregory

UpstartはPIDをチェックするだけなので、実際にリクエストを行うMonitのようなツールは、アプリの健全性の答えをより忠実に提供します。プロセスは正常に動作している可能性がありますが、何らかの方法でスタックしているため、リクエストを処理できません。

39
flq

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

起動スクリプト(/ etc/init/app_name):

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
76