1 概述
由于资源的有限或者投资等原因,服务器资源不够用,不能确保单个服务器跑单个服务,更别说做一些进程的主备高可用
在这种情况下也同样希望进程高可用,本次采用demontools提供的daemontools-0.76来实现单点单进程的保活机制
2 安装
安装路径:/home/app
安装patch包
[root@localhost daemontools-0.76]# yum -y install patch
[root@localhost app]# wget http://www.qmail.org/moni.csi.hu/pub/glibc-2.3.1/daemontools-0.76.errno.patch
[root@localhost app]# tar -zxvf daemontools-0.76.tar.gz
[root@localhost app]# cd admin/daemontools-0.76/src/
[root@localhost src]# patch < /home/app/daemontools-0.76.errno.patch
patching file error.h
[root@localhost src]# cd ..
[root@localhost daemontools-0.76]# package/install
启动
[root@localhost daemontools-0.76]# /command/svscanboot &
[root@localhost daemontools-0.76]# ps -ef | grep svscanboot
存在对应的进程就说明启动成功
但是这种启动方式存在一定问题,shell终端退出之后进程也就退出,不适用生产环境
3 添加监控的服务
监听命令格式:nohup supervise /service/${path}/ &
这就话意思就是在后台开启一个supervise进程循环执行/service/${path}/ 下的run脚本
案例:监听tomcat进程
[root@localhost daemontools]# cd /service/
[root@localhost service]# mkdir tomcat-webems/
[root@localhost tomcat-webems]# vi run
#!/bin/bash
HTTPCODE=`curl -I -m 30 -o /dev/null -s -w %{http_code} http://localhost:8080`
if [ "$HTTPCODE" = "200" ]; then
echo "tomcat has already started"
else
PID=`jps | grep Bootstrap | awk '{print $1}'`
if [ -n $PID ]; then
while true
do
kill -9 $PID &>/dev/null 2>&1
[ $? -ne 0 ] && break
sleep 1
done
fi
exec /usr/local/tomcat-webems/bin/startup.sh
sleep 10
fi
上个脚本的意思就是先curl访问tomcat,若状态吗为200说明tomcat正常运行,什么都不做
若不是200,先将不正常的tomcat进程杀掉,之后在重启tomcat
[root@localhost tomcat-webems]# chmod -R 755 run
[root@localhost daemontools-0.76]# jps
这个时候没有启动tomcat
[root@localhost tomcat-webems]# nohup supervise /service/tomcat-webems/ &
[root@localhost daemontools-0.76]# jps
可以看到此时已经启动起来tomcat
[root@localhost tomcat-webems]# kill -9 91880
杀死之后过一段时间就启动成功