線上多服務管理工具實例剖析

原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。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.www58058.com/1932

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

相關推薦

  • 【推薦】Linux 簡單部署LAMP

    Linux 簡單部署LAMP: 實驗環境: 1、主機系統Centos6.7_X86_64 2、DNS&CA:192.168.3.10 3、LAMP安裝方式為rpm 4、主機IP:192.168.3.11提供web站點:     http://wp.neolinux.com     &nbsp…

    Linux干貨 2016-06-22
  • rsyslog日志系統

    一、前言  什么是日志?    日志就是歷史事件,按時間序列將發生的事件予以記錄;日志記錄信息記錄的是事件的發生時間以及事件內容  Linux下記錄日志的系統:    syslog:是CentOS 5.0系統上使用的日志系統,有兩類日志,分別是syslogd、klogd;    …

    Linux干貨 2015-06-15
  • 第九周作業

    1. 寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; # awk -F: ‘{if($7!=”/sbin/nologin”) {printf “Logined user %s\n”…

    Linux干貨 2017-03-01
  • MySQL-MMM實現MySQL高可用讀寫分離

    實驗環境 實驗拓撲 主機配置環境說明 主機名 IP地址 角色/用途 MySQL Server_ID master1 192.168.80.101 MySQL主節點,可讀寫操作 11 master2 192.168.80.102 MySQL備節點,可讀寫操作 12 slave1 192.168.80.103 MySQL從節點,僅能讀 13 slave2 192…

    Linux干貨 2016-06-01
  • 第一周-2:Linux部分常用命令使用示例、查看命令行工具使用手冊以及LinuxFHS部分目錄簡介

    一、部分命令使用示例: 1、ifconfg 在命令行界面下或系統配置腳本中用于配置、控制及查詢TCP/IP網絡接口的系統管理工具 [netartisan@localhost 桌面]$ ifconfig eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500 &n…

    Linux干貨 2016-11-07
欧美性久久久久