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

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

相关推荐

  • 进程和计划任务

    一、进程概念    内核的功用:进程管理、文件系统、网络功能、内存管理、驱动程序、 安全功能等 v Process:  运行中的程序的一个副本(文件),是被载入内存的一个指令集合,在内存中运行,系统指定一个内存空间和PID编号;进程ID(Process ID ,PID )号码被用来标记各个进程;存在生命周期 &nbsp…

    Linux干货 2016-11-27
  • 计算机起源与Linux简述

    什么是计算机?  计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。是能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。 它由硬件系统和软件系统组成,没有安装任何软件的计算机被称为裸机。硬件系统由运算器,控制器,存储器,输入设备,输出设备几部分组成;…

    Linux干货 2017-03-29
  • 马哥教育网络班22期+第7周课程练习 忍者乱太郎喻成

    第七周 1、创建一个10G分区,并格式为ext4文件系统;   (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;    我个人比较喜欢使用交互式的分区工具fdisk    我以fdisk为例: &n…

    Linux干货 2016-11-21
  • 制作python模块安装包[原创]

     python的第三方模块越来越丰富,涉及的领域也非常广,如科学计算、图片处理、web应用、GUI开发等。当然也可以将自己写的模块进行打包或发布。一简单的方法是将你的类包直接copy到python的lib目录,但此方式不便于管理与维护,存在多个python版本时会非常混乱。现介绍如何编写setup.py来对一个简单的python模块进行打包。 一、…

    Linux干货 2015-03-27
  • shell编程及小命令

    1. ping 10.1.252.25d2 -c1 -w1 &> /dev/null && echo "The host is up" || echo "The host is down" 2. 在vim命令中, p或则P可以实现复制。     p: 复制到下一行 &n…

    Linux干货 2016-08-12
  • Shell 编 程 之 until循 环 语 句-20160817

    Shell 编 程 之 until循 环 语 句 §·练习题: 1 每隔3秒钟到系统上获取已经登录的用户的信息;如果发现用户hacker登录,则将登录时间和主机记录于日志/var/log/login.log中,并提示该用户退出系统? 解:解题思路:按照题意该脚本一直无限循环,一直探测用户h…

    Linux干货 2016-08-22