手动部署java jar包

手动部署java jar包

  • 出现的问题
    • 使用说明
    • 使用步骤
    • 注意事项
    • 脚本内容

出现的问题

项目开发或者部署过程中,开发人员总是因为启动命令的错误,导致启动参数不对,或者环境不对的情况,根据此种情况,作者编写了一个通用的脚本命令

使用说明

部署目录结构(必须遵守该结构),如:
#--------IFOX
#----短信服务(sms-service)
#----地区服务(area-service)
#----启动脚本ifox-service-sh

使用步骤

1、copy本脚本到项目部署父目录下,如:IFOX下
2、运行命令 sh ifox-service-sh start|stop|restart all|sms-service|area-service all代表启动该目录下全部的jar包
3、查看日志是启动成功。默认等待10S后执行命令,如需修改请自行修改

注意事项

1、如需修改启动参数,请修改JAVA_OPTS
2、脚本不一定保证正常启动成功,请保证上传jar包能正常运行

脚本内容

#! /bin/sh
#使用说明:
#部署目录结构(必须遵守该结构),如:
#--------IFOX
#----短信服务(sms-service)
#----地区服务(area-service)
#----启动脚本ifox-service-sh
#
#使用步骤:
#1、copy本脚本到项目部署父目录下,如:IFOX下
#2、运行命令 sh ifox-service-sh start|stop|restart all|sms-service|area-service  all代表启动该目录下全部的jar包
#3、查看日志是启动成功。默认等待10S后执行命令,如需修改请自行修改
#
#注意事项
#1、如需修改启动参数,请修改JAVA_OPTS
#2、脚本不一定保证正常启动成功,请保证上传jar包能正常运行


#java虚拟机启动参数
JAVA_OPTS="-Xms256m -Xmx256m -Xmn256m -Xss256k"
#启动失败提示语-缺少启动模块
START_ERROR_COMMAND="第二个参数请输入: all | jar包所在文件夹名称"

#启动服务
start() {
  # jar包路径
  JAR_PATH=$('pwd')
  #时间
  TIME=$(date "+%Y-%m-%d %H:%M:%S")
  #控制是否输入参数并给出提示
  local commandOk=0
  local okCount=0
  #参数:具体的模块名或者all(全部模块)
  local command="$1"
  if [ "$command" == "" ];then
    #参数不合法抛出参数提示
    echo $START_ERROR_COMMAND
	return
  fi
  echo "-------${TIME}--------正在start:${command}"
  #循环处理指定文件下全部的jar
  for JAR in `ls -l ${JAR_PATH}/*/*.jar | awk '{print $9}'`
  do
    #jar包名称
    JAR_NAME=$(basename $JAR)
    #jar包目录
    JAR_DIR=$(dirname $JAR)
    #判断输入的参数是否合法
    if [ "$command" == "all" ] || [[ "$JAR_DIR" == *"$command"* ]];then
      #标记输入参数合法
      commandOk=1
      #启动时间统计初始化
      count=0
      #获取程序运行情况
      PID=`ps -ef |grep $(echo $JAR | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
      if [ -n "$PID" ];then
        #抛出提示
        echo "$JAR_NAME:已经启动,PID=$PID"
      else
        #启动服务
        exec nohup java $JAVA_OPTS -jar $JAR >> $JAR_DIR/catalina.out 2>&1 &
		echo "$JAR_NAME 启动中.................."
		#等待10s
		sleep 10s
        #获取PID
        PID=`ps -ef |grep $(echo $JAR | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
        #自循环判定是否启动
        while [ -z "$PID" ]
        do
          #一定时间内服务未启动抛出错误提示并终止启动程序
          if (($count == 30));then
            #启动失败
            echo "$JAR_NAME:$(expr $count \* 10)秒内未启动,请检查!"
            break
          fi
          #启动过程输出提示,记录启动时间
          count=$(($count+1))
          echo "$JAR_NAME 启动中.................."
          #时间阻断:10s
          sleep 10s
          #获取PID
          PID=`ps -ef |grep $(echo $JAR | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
        done
        #启动成功输出提示并记录启动服务数量
        okCount=$(($okCount+1))
        echo "$JAR_NAME:已经启动成功,PID=$PID"
      fi
    fi
  done
  if(($commandOk == 0));then
    #参数不合法抛出参数提示
    echo $START_ERROR_COMMAND
  else
    #本次脚本运行结束提示启动服务数量
    echo "............本次共启动: $okCount 个服务..........."
	#换行
	echo ""
  fi
}

#停止服务
stop() {
  # jar包路径
  JAR_PATH=$('pwd')
  #时间
  TIME=$(date "+%Y-%m-%d %H:%M:%S")
  #参数:具体的模块名或者all(全部模块)
  local command="$1"
  if [ "$command" == "" ];then
    #参数不合法抛出参数提示
    echo $START_ERROR_COMMAND
	return
  fi
  #控制是否输入参数并给出提示
  local commandOk=0
  #停止服务数量
  local okCount=0
  echo "-------${TIME}------------正在-stop : ${command}"
  #循环系统模块数组
  for JAR in `ls -l ${JAR_PATH}/*/*.jar | awk '{print $9}'`
  do
    #jar包名称
    JAR_NAME=$(basename $JAR)
    #jar包目录
    JAR_DIR=$(dirname $JAR)
    #判断输入的参数是否合法
	if [ "$command" == "all" ] || [[ "$JAR_DIR" == *"$command"* ]];then
      #标记输入参数合法
      commandOk=1
      #获取程序运行情况
      PID=`ps -ef |grep $(echo $JAR | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
      if [ -n "$PID" ];then
        #抛出提示并结束服务
        echo "$JAR_NAME:准备结束,PID=$PID"
        kill -9 $PID
        #获取PID
        PID=`ps -ef |grep $(echo $JAR | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
        #自循环判定是否停止
        while [ -n "$PID" ]
        do
          #时间阻断:3s监测
          sleep 3s
          #获取PID
          PID=`ps -ef |grep $(echo $JAR | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
        done
        #抛出结束提示并记录结束服务数量
        echo "$JAR_NAME:成功结束"
        okCount=$(($okCount+1))
      else
        #抛出未启动提示
        echo "$JAR_NAME:未运行"
      fi
    fi
  done
  if (($commandOk == 0));then
    #参数不合法抛出参数提示
    echo "第二个参数请输入:当前文件所在同级文件夹名称"
  else
    #本次脚本运行结束提示启动服务数量
    echo "............本次共停止: $okCount 个服务............"
  fi
}

#执行入口
case "$1" in
  start)
    #启动服务
    start "$2"
  ;;
  stop)
    #停止服务
    stop "$2"
  ;;
  restart)
    #重启服务
    stop "$2"
    sleep 3s
    start "$2"
  ;;
  *)
    #默认提示
    echo "第一个参数请输入:start|stop|restart"
    exit 1
  ;;
esac

你可能感兴趣的:(shell)