美文网首页
一键启动项目所有模块

一键启动项目所有模块

作者: 木子_vajra | 来源:发表于2023-12-12 19:27 被阅读0次

一键启动project所有模块,直接上脚本

#!/bin/bash
#####################################################Environment Setting#######################################################

#程序代码数组
APPS=(job gateway admin front)
#程序名称数组
NAMES=(任务模块 网关模块 后台管理 前台页面)
#jar包数组
JARS=(xxl-job-admin-2.0.jar server-gateway-2.0.jar server-admin-2.0.jar server-front-2.0.jar)
#jar包路径数组
PATHS=(/opt/jeecms_x2/server_shell/xxl-job/ /opt/jeecms_x2/server_shell/server-gateway/ /opt/jeecms_x2/server_shell/server-admin/ /opt/jeecms_x2/server_shell/server-front/)
#port暴露的tcp端口
ports=(18080 8191 18001 18002)
start(){
    local APPNAME=
    local NAME=
    local CLASSNAME=
    local PROJECTDIR=
    local command="sh start.sh"
    local cmd2="$1"
    local cmd2ok=0
    local cnt=0
    local okcnt=0
    #local C_PID="0"
    #for i in `seq 0 22`
    echo "---------------------------开始启动服务..."
    for(( i=0;i<${#APPS[@]};i++))
    do
        APPNAME=${APPS[$i]}
        NAME=${NAMES[$i]}
        CLASSNAME=${JARS[$i]}
        PROJECTDIR=${PATHS[$i]}
        if [ "$cmd2" == "all" ] || [ "$cmd2" == "$APPNAME" ]; then
            cmd2ok=1
            C_PID="0"
            cnt=0
            PID=`ps -ef |grep $(echo $CLASSNAME |awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
            if [ -n "$PID" ]
            then
                echo "$APPNAME---$NAME:己经运行,PID=$PID"
                #okcnt=$(($okcnt+1))
            else
                cd $PROJECTDIR
                rm -f $PROJECTDIR/nohup.out
                command="nohup sh $PROJECTDIRstartsh"
                                exec $command >> $PROJECTDIR/logs/nohup.out &
                PID=`ps -ef |grep $(echo $CLASSNAME |awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
                cnt=0
                #while (("$C_PID" == "0"))
                while [ -z "$PID" ]
                do
                    if (($cnt==30))
                    then
                        echo "$APPNAME---$NAME:$cnt秒内未启动,请检查!"
                        break
                    fi
                    cnt=$(($cnt+1))
                    sleep 1s
                    #ps -ef | grep "$CLASSNAME" | awk '{print $2}' | while read pid
                    #do
                    # C_PID=$(ps --no-heading $pid | wc -l)
                    #done
                    PID=`ps -ef |grep $(echo $CLASSNAME |awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
                done
                okcnt=$(($okcnt+1))
                echo "$APPNAME---$NAME:己经成功启动,PID=$PID"
                #前台模块启动较慢
                if [ "$APPNAME" == "deal" ] ;
                then
                    echo "$APPNAME---$NAME:启动中..."
                    sleep 30s
                fi
                if [ "$APPNAME" == "dispatch" ] ;
                then
                    echo "$APPNAME---$NAME:启动中..."
                    sleep 10s
                fi
            fi
            #done
        fi
    done
    if (($cmd2ok==0))
    then
        echo "command2: all|job|gateway|admin|front"
    else
        echo "---------------------------本次启动:$okcnt个服务"
    fi
}

stop(){
    local APPNAME=
    local CLASSNAME=
    local PROJECTDIR=
    local command="sh shutdown.sh"
    local cmd2="$1"
    local cmd2ok=0
    local okcnt=0
    echo "---------------------------开始停止服务..."
    for(( i=0;i<${#APPS[@]};i++))
    do
        APPNAME=${APPS[$i]}
        NAME=${NAMES[$i]}
        CLASSNAME=${JARS[$i]}
        PROJECTDIR=${PATHS[$i]}
        if [ "$cmd2" == "all" ] || [ "$cmd2" == "$APPNAME" ]; then
            cmd2ok=1
            PID=`ps -ef |grep $(echo $CLASSNAME |awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
            if [ -n "$PID" ]
            then
                echo "$NAME:PID=$PID准备结束"
                kill $PID
                PID=`ps -ef |grep $(echo $CLASSNAME |awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
                while [ -n "$PID" ]
                do
                    sleep 1s
                    #C_PID=$(ps --no-heading $PID | wc -l)
                    PID=`ps -ef |grep $(echo $CLASSNAME |awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
                done
                echo "$NAME:成功结束"
                okcnt=$(($okcnt+1))
            else
                echo "$NAME:未运行"
            fi
            #done
        fi
    done
    if (($cmd2ok==0))
    then
        echo "command2: all|job|gateway|admin|front"
    else
        echo "---------------------------本次共停止:$okcnt个服务"
    fi
}
status(){
    local APPNAME=
    local NAME=
    local CLASSNAME=
    local PROJECTDIR=
    local port=
    local command="sh start.sh status"
    local cmd2="$1"
    local cmd2ok=0
    local cnt=0
    local okcnt=0
    echo "---------------------------开始查询服务..."
    for(( i=0;i<${#APPS[@]};i++))
    do
        APPNAME=${APPS[$i]}
        NAME=${NAMES[$i]}
        CLASSNAME=${JARS[$i]}
        PROJECTDIR=${PATHS[$i]}
        port=${ports[$i]}
        if [ "$cmd2" == "all" ] || [ "$cmd2" == "$APPNAME" ]; then
            cmd2ok=1
            C_PID="0"
            cnt=0
            PID=`ps -ef |grep $(echo $CLASSNAME |awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
            if [ -n "$PID" ]
            then
                echo "$APPNAME---$NAME:己经运行,PID=$PID"
                lsof -i :$port
            else
                echo "$APPNAME---$NAME:未运行,PID=null"
            fi
                        okcnt=$(($okcnt+1))
        fi
    done
    if (($cmd2ok==0))
    then
        echo "command2: all|job|gateway|admin|front"
    else
        echo "---------------------------本次共查:$okcnt个服务"
    fi
}
case "$1" in
    start)
        start "$2"
        exit 1
    ;;
    stop)
        stop "$2"
    ;;
    restart)
        stop "$2"
        start "$2"
    ;;
        status)
                status "$2"
        ;;
    *)
        echo "command1: start|stop|restart|status"
        exit 1
    ;;
esac

效果预览

[web@ecs-e31a-1110168 ~]$ sh oneKeyServiceStart.sh stop all
---------------------------开始停止服务...
任务模块:PID=5831准备结束
任务模块:成功结束
网关模块:PID=5899准备结束
网关模块:成功结束
后台管理:PID=5990准备结束
后台管理:成功结束
前台页面:PID=6080准备结束
前台页面:成功结束
---------------------------本次共停止:4个服务
[web@ecs-e31a-1110168 ~]$ sh oneKeyServiceStart.sh start all
---------------------------开始启动服务...
nohup: redirecting stderr to stdout
job---任务模块:己经成功启动,PID=9262
nohup: redirecting stderr to stdout
gateway---网关模块:己经成功启动,PID=9343
nohup: redirecting stderr to stdout
admin---后台管理:己经成功启动,PID=9424
nohup: redirecting stderr to stdout
front---前台页面:己经成功启动,PID=9512
---------------------------本次启动:4个服务
[web@ecs-e31a-1110168 ~]$ sh oneKeyServiceStart.sh status all
---------------------------开始查询服务...
job---任务模块:己经运行,PID=9262
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    9262  web   28u  IPv6  72965      0t0  TCP *:18080 (LISTEN)
java    9262  web   34u  IPv6  72966      0t0  TCP localhost:18080->localhost:35502 (ESTABLISHED)
java    9424  web  289u  IPv6  80324      0t0  TCP localhost:35502->localhost:18080 (ESTABLISHED)
gateway---网关模块:己经运行,PID=9343
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    9343  web  188u  IPv6  74003      0t0  TCP *:8191 (LISTEN)
admin---后台管理:己经运行,PID=9424
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    9424  web  290u  IPv6  78075      0t0  TCP *:18001 (LISTEN)
front---前台页面:己经运行,PID=9512
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    9512  web  236u  IPv6  78038      0t0  TCP *:18002 (LISTEN)
---------------------------本次共查:4个服务

相关文章

网友评论

      本文标题:一键启动项目所有模块

      本文链接:https://www.haomeiwen.com/subject/ctovgdtx.html