线上多服务管理工具实例剖析

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nolinux.blog.51cto.com/4824967/1583156

       公司线上对nginx、tomcat和jar包的java应用的服务管理脚本之前都是单独分离开的,这样子就造成了运维人员在跳板机上进行服务管理的时非常的不方便。特别是把这些服务管理框架纳入到自动化管理平台时,没有一个统一的服务管理接口去使用。

       因此,在空的时候,我就将多个服务的管理脚本融合在了一起,将他做成一个工具,这样子就减少了服务管理的杂乱。

       废话不说了,下面就是脚本内容,文章结尾我会简单介绍该脚本的思路。

#!/bin/bash
#
# 本脚本用来对系统上的多服务进行管理操作
# 目前仅支持nginx、tomcat和jar包类的java应用进行管理操作
# Written by sunsky
# Mail : 274546888@qq.com
# Date : 2014-11-26 15:00:00
#
  
function USAGE {
    echo -e "33[31m脚本名称: 33[37m"
    echo "    $0"
    echo -e "33[31m语法结构: 33[37m"
    echo "    $0 {nginx|tomcat|*service} {start|stop|restart|status}"
    echo -e "33[31m使用范例: 33[37m"
    echo "    $0 nginx start"
    echo "    $0 tomcat restart"
    echo "    $0 vin-service status"
    echo -e "33[31m注意事项: 33[37m"
    echo "    1. 该脚本管理的目录必须遵循如下规则:"
    echo "       a) nginx 部署路径必须能够通过 /usr/local/nginx 访问到"
    echo "       b) tomcat 部署路径必须能够通过 /usr/local/tomcat 访问到"
    echo "       c) service 类服务的部署路径必须能够通过 /home/apps/service类项目名/current/ 访问到"
    echo "    2. \$1(服务类型)和\$2(操作)参数必须存在"
    exit 2
}
 
function CAT_FUWU {
       if [ -z $PID ];then
           case $SIGNAL in
           start|restart)
               echo "正在启动 $FUWU 服务"
           ;;
           stop)
               echo "$FUWU 服务已经关闭"
               exit
           ;;
           status)
               echo "$FUWU 服务处于关闭"
           ;;
           esac
       else
           case $SIGNAL in
           start)
               echo "$FUWU 服务已经开启"
               exit 0
           ;;
           stop|restart)
               echo "你所要杀掉的 $FUWU 服务对应的进程号为 $PID"
           ;;
           status)
               echo "$FUWU 服务目前正在运行,对应的进程号为 $PID"
           ;;
           esac
       fi
}
 
function KILL_FUWU {
    if [[ $PID != "" ]];then
        for i in $PID;do
            kill $PID >/dev/null 2>&1
            sleep 3
            kill -9 $PID >/dev/null 2>&1
        done
    fi
}
 
function START_NGINX {
    /usr/local/nginx/sbin/nginx
    PID=`ps -ef|awk  '$0~"nginx"&&$0~"master"&&$0!~"awk"{print $2}'`
    echo "$FUWU 服务已经启动,它所对应的进程号为 $PID"
}
 
function START_TOMCAT {
    /bin/bash /usr/local/tomcat/bin/startup.sh >& /dev/null
    PID=`ps aux|awk  '$0~"java"&&$0~"tomcat"&&$0!~"awk"{print $2}'`
    echo "$FUWU 服务已经启动,它所对应的进程号为 $PID"
}
 
function START_SERVICE {
        /bin/bash /home/apps/$FUWU/current/startup.sh &
        PID=`ps -ef|awk '$0~"'$FUWU'"&&$0~"jar"&&$0!~"awk"{print $2}'`
        echo "$FUWU 服务已经启动,它所对应的进程号为 $PID"
}
 
function FUWU_LIST {
    case $SIGNAL in
    start)
        CAT_FUWU
        $1
    ;;
    stop)
        CAT_FUWU
        KILL_FUWU
    ;;
    restart)
        CAT_FUWU
        KILL_FUWU
        $1
    ;;
    status)
        CAT_FUWU
    ;;
    *)
        USAGE
    ;;
    esac
}
 
function NGINX {
    PID=`ps -ef|awk  '$0~"nginx"&&$0~"master"&&$0!~"awk"{print $2}'`
    FUWU_LIST START_NGINX
}
 
function TOMCAT {
    PID=`ps aux|awk  '$0~"java"&&$0~"tomcat"&&$0!~"awk"{print $2}'`
    FUWU_LIST START_TOMCAT
}
  
function SERVICE {
    if [ ! -f /home/apps/$FUWU/current/startup.sh ];then
        USAGE
    fi
    PID=`ps -ef|awk '$0~"'$FUWU'"&&$0~"jar"&&$0!~"awk"{print $2}'`
    FUWU_LIST START_SERVICE
}
 
if [ $# -lt 2 ];then
     USAGE
fi
 
FUWU=$1
SIGNAL=$2
 
case $1 in
nginx)
    NGINX
;;
tomcat)
    TOMCAT
;;
*service)
    SERVICE
;;
*)
    USAGE
;;
esac

        以上呢,就是整个脚本的内容了。

       在该脚本中,我将查看服务状态信息、杀掉服务和服务管理动作的操作做成了可重用的函数,而对启动每个应用的操作做成了单独的模块。虽然目前只是将nginx、tomcat和jar包类的java应用集成在了一起,但是后期如果有其它服务要加进来的话,也是非常的方便。

       下面对每个模块简单进行介绍:

USAGE          # 帮助模块喽
CAT_FUWU       # 用于在接收到用户操作时,判断服务当前状态并给予正确相应
KILL_FUWU      # 负责杀掉服务的公共模块
START_NGINX    # 负责启动NGINX应用的模块
START_TOMCAT   # 负责启动TOMCAT应用的模块
START_SERVICE  # 负责启动JAR包类的JAVA应用的模块
FUWU_LIST      # 负责响应单个服务操作的公共列表
NGINX          # 集合NGINX管理操作的模块
TOMCAT         # 集合TOMCAT管理操作的模块
SERVICE        # 集合JAR包类JAVA应用管理操作的模块

    下面附上脚本的执行效果图:

1.jpg

OK!以上就是脚本的内容,希望能对51博友有所帮助

转自:http://nolinux.blog.51cto.com/4824967/1583156

原创文章,作者:s19930811,如若转载,请注明出处:http://www.178linux.com/1932

(0)
s19930811s19930811
上一篇 2016-08-15
下一篇 2016-08-15

相关推荐

  • keepalived+nginx-upstream部署高可用反向代理

    keepalived+nginx-upstream部署高可用反向代理 实验拓扑 实验要求 两个web server提供httpd服务,ip地址分别是172.18.27.201、202,掩码是16 两个nginx proxy提供高可用反向代理,ip地址分别是172.18.27.102、200,掩码是16. client能够访问web server,使用dr模型…

    2017-05-15
  • Heartbeat高可用http

    Heartbeat高可用http 实验图 heartbeat高可用http 一、实验图: 二、heartbeat高可用http(Heartbeat V1 haresource) heartbeat节点ssh互信 heartbeat节点名称相互解析,uname -n heartbeat节点时间一致性 安装前准备: ssh多节点互信 [root@node4&nb…

    Linux干货 2016-07-07
  • N26 第五周博客作业

    1、显示当前系统上root、fedora或user1用户的默认shell; 演示:     [root@263821a05cd9 /]# grep -E “^(root|fedora|user1)\>” /etc/passwd    root:x:0:0:root:/r…

    Linux干货 2017-03-05
  • 管理用户组的命令

    用户账户 管理用户的命令及配置文件, Useradd,usermod,userdel,newusers,chpasswd,passwd,chage,chfn,chsh,id,su,finger Useradd:创建用户,         Useradd 选项 参数  &…

    Linux干货 2016-10-23
  • 千万不要把 bool 设计成函数参数

    我们有很多Coding Style 或 代码规范。但这一条可能会经常被我们所遗忘,就是我们经常会在函数的参数里使用bool参数,这会大大地降低代码的可读性。不信?我们先来看看下面的代码。 当你读到下面的代码,你会觉得这个代码是什么意思? widget->repaint(false); 是不要repaint吗?还是别的什么意思?看了文档后,我们才知道这个…

    Linux干货 2016-07-10
  • ssh 笔记

    ssh

    Linux干货 2018-01-08