linux单进程服务保活supervise

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

杀死之后过一段时间就启动成功

你可能感兴趣的:(linux单进程服务保活supervise)