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

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。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

相关推荐

  • N25第六周博客作业

    第六周博客作业   请详细总结vim编辑器的使用并完成以下练习题 1、 复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; :%s@^\([[:space:]]\+\)@#\1@ig    2、 复制/boot/grub/grub.con…

    Linux干货 2017-01-10
  • nginx负载均衡搭建

    组 网络拓扑图 nginx负载均衡服务器搭建 首先准备三台机器 主机A(nginx负载均衡器) 主机B 主机C 主机A需两块网卡(一块外网,一块内网) 主机B和主机C各一块 (各一块内网的IP,如果主机B C和主机A内网网卡在一个网段就不需要配置网关地址了。 规划好网络后,nginx负载主机分别ping下各rs主机是否可通 主机A打开核心转发功能 #echo…

    Linux干货 2017-05-17
  • 运维工程师技能需求排行

    这是我今天在拉勾网搜索运维,翻完了4四页也招聘信息之后得到的,我的目的是想要看看之后的学习,哪个更应该成为重点,有些在我意料之中,有些还真的没想到,算是努力了一个小时的收获吧,分享给大家。
    注意:其中的看法仅代表个人观点,很多都是依靠我自己的学习经验和工作经验累积的

    Linux干货 2017-12-12
  • 马哥教育网络班20期+第6周课程练习

    vim编辑器使用总结 一、文件的打开与关闭             打开文件:                 # vim [OPTION]… FILE…      …

    Linux干货 2016-07-17
  • 文本处理工具命令使用以及文件权限管理

    一 sort uniq wc cut tr 等文本处理工具的基本用法 1. 通过who命令查看当前登录了哪些用户,并通过uniq或sort -u命令将重复的行只显示一次 [root@Linuxprobe ~]# who | cut -d’ ‘ -f1 | sort -u 目前查看系统有两个用户登录 harrycai root [root@Linuxprobe…

    Linux干货 2017-08-13
  • 马哥教育网络班19期第二周课程练习

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 cd:切换目录命令实例  cd [dirctory] 切换目录  cd .. 返回上一级目录  cd –  来回切换  cd ~  切换到家目…

    Linux干货 2016-06-19