美文网首页
shell 脚本编写 SpringBoot 项目启动器

shell 脚本编写 SpringBoot 项目启动器

作者: 窝窝_头 | 来源:发表于2021-05-27 09:54 被阅读0次

    用shell脚本制作一个java服务启动器
    ⚠️ 不足之处请多多包涵 ,转载请注明出处。

    如果在运行中提示lsof命令不存在, 请使用yum install lsof命令安装

    #! /bin/bash
    ## author: wzc
    ## e-mail: voisen@icloud.com
    ## This is a project launcher
    
    # 启动/停止 超时时间 秒
    WAIT_TIMEOUT=60
    # 启动的项目数组
    PROJECTS=(YOUR_JAR_1.jar YOUR_JAR_2.jar)
    #jar 运行额外的参数
    JAR_ARGS=""
    
    
    function stop_project()
    {
        if [ $1 == '全部' ] 
        then
            for P in ${PROJECTS[@]}
            do
                stop $P
            done
        else
            stop $1
        fi
    }
    
    function start_project()
    {
        if [ $1 == '全部' ] 
        then
            for P in ${PROJECTS[@]}
            do
                start $P
            done
        else
            start $1
        fi
    }
    
    function service_pid()
    {
        echo `ps -ef | grep $1 | grep "java -jar" | awk {'print $2'}`
    }
    
    function listen_port_pid()
    {
        echo `lsof -p $1 | grep "$2"`
    }
    
    
    function stop()
    {
    
        RESULT=`service_pid $1`
        if [[ -n $RESULT ]]
        then
            kill -15 $RESULT
            TIMEOUT=$(($WAIT_TIMEOUT * 10))
            while [ $TIMEOUT -gt 0 ] 
            do
                RESULT=`service_pid $1`
                W_IDX=$(($TIMEOUT % 4))
                printf "> 停止服务 [%s]......[%s]\r" $1 ${WAIT_CHARS[$W_IDX]}
                if [ -z $RESULT ] 
                then
                    printf "> 停止服务成功 [%s]......[v]\n" $1
                    return
                fi
                sleep 0.1s
                TIMEOUT=$(( $TIMEOUT - 1 ))
            done
            printf "> 停止服务超时 [%s]......[×]\n" $1
            return
        fi
        printf "> 服务未运行 [%s]......[!]\n" $1
    }
    
    function start()
    {
        # 检查服务是否在运行
        RESULT=`service_pid $1`
        if [[ -n $RESULT ]]
        then
            printf "> 服务正在运行 [%s]......[!]\n" $1
            return
        fi
        nohup java -jar $JAR_ARGS $1 >/dev/null 2>&1 &
        TIMEOUT=$(($WAIT_TIMEOUT * 10))
        while [ $TIMEOUT -gt 0 ] 
        do
            W_IDX=$(($TIMEOUT % 4))
            printf "> 启动服务 [%s]......[%s]\r" $1 ${WAIT_CHARS[$W_IDX]}
            RESULT=`service_pid $1`
            if [[ -n $RESULT ]] 
            then
                LRESULT=`listen_port_pid ${RESULT[0]} $1`
            fi
            
            if [[ -n $LRESULT ]] 
            then
                printf "> 启动服务成功 [%s]......[v]\n" $1
                return
            fi
            sleep 0.1s
            TIMEOUT=$(( $TIMEOUT - 1 ))
        done
        printf "> 启动服务超时 [%s]......[x]\n" $1
    }
    
    
    WAIT_CHARS=('|' '/' '-' '\')
    echo "**** 目标项目 ****"
    echo '[0]全部'
    for((i=0;i<${#PROJECTS[@]};i++));
    do
        echo '['$((i+1))']'${PROJECTS[$i]}
    done
    echo ""
    echo -n "请选择项目: "
    read idx
    echo ""
    if [ $idx -gt ${#PROJECTS[@]} ] 
    then
        echo " ❗️ 输入的项目无效[$idx]"
        exit
    fi
    if [ $idx == 0 ]
    then
        NAME='全部'
    else
        NAME=${PROJECTS[$((idx-1))]}
    fi
    echo "***** 执行的操作 *****"
    echo "[1]启动 [$NAME]"
    echo "[2]停止 [$NAME]"
    echo "[3]重启 [$NAME]"
    echo ""
    echo -n "请选择对[$NAME]的操作: "
    read OPS
    echo ""
    case $OPS in
        1)
        # 启动项目
        start_project $NAME
        ;;
        2)
        stop_project $NAME
        ;;
        3)
        stop_project $NAME
        start_project $NAME
        ;;
        *) echo " ❗️ 无效的操作"
        ;;
    esac
    
    

    相关文章

      网友评论

          本文标题:shell 脚本编写 SpringBoot 项目启动器

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