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

Jam*_*ory 52 deployment upstart monit node.js

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

我很高兴能使用类似或monit的赋格曲,但我不知道为什么人们不(或不能),只要用暴发户的重生功能.我假设Upstart将监视启动过程的PID,如果它死了就再次启动它.Monit或Fugue给你的Upstart不是什么?

Dan*_*ley 75

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

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

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

Monit配置:

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)


flq*_*flq 39

鉴于Upstart只是检查PID,像Monit这样的工具可以提供实际请求,可以更真实地为您提供应用程序理智的答案.一个进程可能正在愉快地运行但是以某种方式卡住,以至于它不提供请求.

  • 这是一个非常好的观点.对于一个有效的网络服务器而言,除了活着之外还有更多,它实际上也能够满足要求! (5认同)
  • 我认为这几乎解决了这个问题.只要您的应用程序无法存活但无法使用,Upstart respawn就可以了.Monit更适合像网络服务器那样服务器可能存活但没有响应.谢谢你的回答,现在很清楚. (2认同)
  • 除了测试本地进程之外,我还使用Monit来测试远程服务器的几个端口和本地文件权限,这非常有用. (2认同)