我创建了一个 upstart 脚本,用于守护一个 node.js 应用程序。upstart 脚本如下:
description "app_name"
start on startup
stop on shutdown
script
export HOME="/home/ubuntu/nodeapp"
exec sudo -u nodejs /usr/local/bin/node $HOME/app/server.js production 2>>/var/log/app_name.error.log >>/var/log/app_name.log
end script
我的监控脚本如下:
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
它工作正常,但现在我想添加 nginx 作为上游的负载平衡器,如下所示:
upstream cluster1 {
least_conn;
server 127.0.0.1:8000;
server 127.0.0.1:8001;
}
server {
listen 0.0.0.0:80;
location / {
proxy_pass http://cluster1;
}
}
那么我应该如何更改 upstart 和 monit 脚本来支持两个服务?我是否需要再编写一个 upstart 和 monit 脚本?
谢谢。
答案1
对于 monit,您可以使用单独的配置文件/etc/monit.d
(或服务配置文件的任何目录),其内容如下:
check process nginx with pidfile /var/run/nginx.pid
if failed host localhost port 80
protocol HTTP request "/ok" then restart
start program = "/etc/init.d/nginx start"
stop program = "/etc/init.d/nginx stop"
group www-data (for ubuntu, debian)
官方有更多配置示例监控站点。您可以查看 Apache 示例以进行进一步的测试。
对于 Upstart 来说,Nginx 的文档有一个例子。
在某种程度上,同时使用 Monit 和 Upstart 有点矫枉过正,而且可能会产生冲突。两者都会重生进程(尽管 Monit 允许对服务进行更详细的测试),并且您可能会遇到一种奇怪的情况,即如果服务意外终止,它们都会争相重新启动服务。更精简的方法是使用 Monit 来监控这些服务(使用您想要的任何额外的 HTTP 探测和内存/CPU 使用情况检查),然后使用 Upstart 来确保 Monit 正在运行。