关于Rails的部署:Rails部署艺术
monit作为监控工具有一个缺点:monit会以daemon模式来启动mongrel进程(以及,可能还有,haproxy进程),也就是说每个mongrel需要自己管理PID文件。问题出现在mongrel被意外杀掉的情况:此时PID文件仍然存在,因此monit没办法再用“mongrelstart -d”的命令来启动mongrel。你必须自己想办法清理这些“僵尸PID”文件。
而runit就比较好:它管理的进程都是自己的子进程,这些子进程以阻塞模式运行,所以也没有PID文件。唯一需要注意的是,haproxy缺省是daemon模式,你需要使用“haproxy-db”把haproxy启动在阻塞模式下。
所以,用runit来监控mongrel(和haproxy)进程,monit只是看着这些进程有没有异常状况;如果出现异常状况,monit调用sv来重启有问题的服务进程。这就是RubyWorks目前采用的系统监控策略。
