使用Monit而不是基本的Upstart设置有什么好处?

时间:2011-01-18 09:56:35

标签: deployment node.js monit upstart

我正在配置我的服务器以运行node.js作为守护程序。我已经设置了Upstart来处理节点的启动和关闭,这非常有效。下一步是确保node.js在它死亡时重新启动。一些guides建议使用Monit(或Fugue)来监控进程(在Monit的情况下,通过向服务器发出HTTP请求并等待响应)。

我很高兴使用像Monit或Fugue这样的东西,但我不确定为什么不会(或不能)使用Upstart的respawn feature。我假设Upstart将监视启动过程的PID,如果它死了就再次启动它。 Monit或Fugue给你的Upstart不是什么?

2 个答案:

答案 0 :(得分:76)

我强烈建议同时使用 Monit AND upstart 。 Upstart可以很容易地对node.js进行deamon化,Monit包含大量有用的应用程序检查,包括内存使用,http请求,cpu使用,......

这是您可以获得的最基本设置的示例。您还可以轻松添加另一个monit配置(使用相同的启动和停止脚本),但使用PID文件和监视进程统计信息。

对于以下配置,在您的应用中创建一个简单的仅限本地的请求处理程序,如果一切正常,则只响应状态200。

Monit config:

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

Upstart脚本(/ 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

答案 1 :(得分:39)

鉴于Upstart只是检查PID,像Monit这样提出实际请求的工具会更忠实地为您提供应用程序理智的答案。一个过程可能会愉快地运行,但会以某种方式停留,以至于它不会为请求提供服务。