美文网首页
jar包发版shell脚本

jar包发版shell脚本

作者: 至爱雅鸿_e631 | 来源:发表于2019-11-18 08:46 被阅读0次

前言

自动化发布第一步:jar包发布脚本。在发布jar包时需要配置一些变量如jvm classpath等,如果每次都copy难免有出错的时候,所以形成一个自动化脚本,每次执行脚本即可。

直接上代码

sh start.sh start 启动服务
sh start.sh stop 关闭服务
sh start.sh restart 重启服务
sh start.sh status 服务状态

将一下代码写入到 start.sh 文件中

#!/bin/bash

#jar包目录
APP_PATH="/Users/zhiaiyahong/intelligentanswer-0.0.1-SNAPSHOT.jar"
#环境变量 如果没有环境变量设置为空即可 ,一般分为 dev test prod
ACTIVE=""
#web项目检查项目是否启动 此路径需要自己创建直接返回 ok 即可,不填写则经过默认时间后认为服务启动
WEB_CHECK_UEL="http://localhost:8091/check"
#console path 数据输出路径,即项目print的内容以及日志sdpt的内容会输出到此文件 /dev/null 为消失,其他具体文件为输出到指定文件
CONSOLE_PATH="/opt/ylbzj/logs/hup.out"
#预计项目多久可以启动或关闭
WEB_START_TIME=30
#项目关闭使用kill ,如果超过规定时间则执行kill -9
WEB_STOP_TIME_FORCE=10

#jvm配置 值依次如下
#元空间初始大小
#元空间最大
#新生代初始空间
#堆栈初始大小
#堆栈最大空间
#垃圾回收器
#启动模式 使用server
#设置时区
JAVA_OPTS="-XX:MetaspaceSize=512M 
-XX:MaxMetaspaceSize=1024M
-XX:NewSize=3072M
-Xms10240m
-Xmx10240m
-XX:+UseG1GC
-Xss512k
-server
-Duser.timezone=GMT+08"

#检查服务是否在运行
is_running(){
    pid=$(ps -ef |grep ${APP_PATH}|grep -v grep|awk '{print $2}')
    #如果不存在返回1,存在返回0     
  if [ -z "${pid}" ]; then
    return 1
  else
    return 0
  fi
}

#运行服务,如果服务运行中则进行提示
start_service(){
    echo "开始启动服务..."
    is_running
    if [ $? -eq "0" ]; then 
        echo "${APP_PATH} 已经在运行,线程id ${pid}";
    else
        #启动jar包,并且将输出仍入黑洞(即不保留输出)
        nohup java $ACTIVE $JAVA_OPTS -jar $APP_PATH  > $CONSOLE_PATH  2>&1 &
        if [ -n "$WEB_CHECK_UEL" ]; then 
            i=1
            start_ok=0
            while [ $start_ok -eq 0 ]
            do
                if [ $WEB_START_TIME -lt $i ]; then
                    start_ok=1
                    break
                fi
                back=$(curl -s ${WEB_CHECK_UEL})
                if [ "$back" == "ok" ]; then
                    start_ok=2
                    break
                fi
                echo "服务启动中(${i})..."
                let i++
                sleep 1
            done
            if [ $start_ok -eq 2 ]; then
                echo "服务已启动"
            else
                echo "服务未在规定时间内正确影响(${WEB_START_TIME}),请检查日志"
            fi
        else
            times=1
            start_ok=0
            while [ $start_ok -eq 0 ]
            do
                if [ $WEB_START_TIME -lt $times ]; then
                    start_ok=1
                    break
                fi
                is_running
                if [ $? -eq "1" ]; then
                    echo "服务启动中(${times})...."
                    sleep 1
                    let times++
                else
                    echo "进程已拉起"
                    start_ok=2
                fi
            done
            if [ $start_ok -eq 1 ]; then
                echo "服务未在规定时间内正确影响(${WEB_START_TIME}),请检查日志"
            fi
        fi
    fi
}

# 停止服务,返回1标识已停止,2kill失败
stop_service(){
    echo "即将关闭程序..."
    is_running
    if [ $? -eq "1" ]; then 
        echo "${APP_PATH} 未运行,无需停止";
        return 1
    else
        echo "杀死进程(kill不带-9) ${pid}"
        kill $pid
        #kill 123
        times=1
        start_ok=0
        use_force=0
        while [ $start_ok -eq 0 ]
        do
            if [ $WEB_STOP_TIME_FORCE -lt $times ]; then
                if [ $use_force -eq 0 ]; then
                    echo "服务未在规定时间关闭(${WEB_STOP_TIME_FORCE}),即将执行kill -9,重新计时"
                    kill -9 $pid
                    #kill -9 123
                    times=1
                    use_force=1
                else
                    start_ok=1
                    break
                fi
            fi
            is_running
            if [ $? -eq "0" ]; then
                echo "服务关闭中(${times})...."
                sleep 1
                let times++
            else
                echo "服务已关闭"
                start_ok=2
            fi
        done
        if [ $start_ok -eq 1 ]; then
            echo "服务未在规定时间关闭(${WEB_STOP_TIME_FORCE}*2),请检查日志"
            return 2
        fi
        return 1
    fi
}


status(){
 is_running
 if [ $? -eq "0" ]; then 
    echo "${APP_PATH} 运行中,线程id ${pid}";
 else
    echo "${APP_PATH} 未运行";
 fi
}

#重启服务
restart_service(){
    echo "开始执行服务重启..."
    stop_service
    if [ $? -eq 1 ]; then
        start_service
    else
        echo "服务未被关闭,无法重启服务,请人工排查"
    fi
}

case "$1" in
    "start")
        start_service
        ;;
    "stop")
        stop_service
        ;;
    "restart")
        restart_service
        ;;
    "status")
        status
        ;;
    *)
        echo "命令为 start|stop|restart|status"
        exit 0
        ;;
        
esac

相关文章

网友评论

      本文标题:jar包发版shell脚本

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