Services Supervision.
版权声明: 允许非商业性转载,但转载时必须标明原作者 fcicq、原始链接 http://www.fcicq.net/wp/?p=736 及本声明。
如何监控服务运行是个难题.
1 start-stop-daemon
最常见的做法.
看名称就知道, 它只会做 start daemon, stop daemon 两件事.
—虽然事实上它还会 send signal 什么的.
如果服务死掉了, 它不管. start daemon 之后就拍屁股走人.
没记错的话是 sysvinit 带的, 有 10 多年的历史了吧.
2 daemontools
传说中的 DJB Way.
qmail, djbdns, ucspi-tcp 啥的按理都必须用这个.
clockspeed 这东西偶还是转不过弯来.
跑题, 拉回来.
在 /etc/inittab 加入一行用于监控 (respawn) svscanboot 的语句便完成了安装.
优点: 自动监控, 5 秒一次, 自动重启, 休息 1 秒 … —这是什么…
缺点: 既然 5 秒监控一次那肯定是要耗资源的…
& 有一个不太可爱的父进程.
3 runit
基于 daemontools 思想的 init 实现.
优点: 非常轻量, 用它做 init 启动应该是飞快的 (可以说除了 Stage 之外就没有阻塞了), 有 daemontools 的所有优点.
缺点: [ runsv - apache ]. 一切服务*上面*都挂着 runsv. (这和刚才 daemontools 一样…)
有爱的例子: 你能停掉 tty3,5,7 上的 getty, 再把 pgsql 关上吗?
sv d getty[357] postgresql
4 supervisord
特点: 使用配置文件管理, 特别支持 fcgi 等应用 (spawn-fcgi 下课? php-fpm 可能还能挺一会儿), 有 Web 管理界面
缺点: python.
5 Monit
特点: 还是配置文件管理, Web 管理界面, 可以扩展 (M/Monit, $$$)
缺点: 并非全面解决方案 (如果 /etc/init.d/xxx 中 start-stop-daemon 写的不好就只好玩完了)
6 /etc/inittab
你怎么重启服务? — 杀掉让它自动重启?
那怎么关掉呢? — …
如果这个服务总是不能启动呢? — …
7 单独成列的 nginx
kill -USR2 nginx / make upgrade 可以无缝升级 nginx (好像还能 rollback.)
但不幸的是, 如果 nginx 自己死掉就不好救了.
只有 nginx 这样一个另类, 不推荐使用所谓标准的 start-stop-daemon 来启动/停止服务.
(你要用 monit ?)
—是它自己死掉的还是你关掉的? 分不清. (你要手动改配置文件吗?)
(supervisord / daemontools / runit ?)
—那无缝升级的能力就自动失去了. 你真在乎这个 uptime? 偶不信
友情提示: 请注意文章的时效性与准确性, 作者不对文章的有效性负责.
Tags:
Permalink Bookmark on del.icio.us
Last Modified: June 3, 2009 at 6:14 pm