# 实战脚本示例06

jar包启动脚本

#!/bin/bash
#判断当前用户是否为root
uidr=`id | awk '{print $1}' | grep root`
uidj=`id | awk '{print $1}' | grep '(jysp)'`
if [ "X$uidr" != "X" -o "X$uidj" == "X" ];then
     echo "请使用jysp用户运行该脚本,切换jysp用户命令:su - jysp"
	 exit 0
fi

./stop_java_jar.sh >/dev/null 2>&1


iso=`arch`
if [ "$iso" == "aarch64" ];then
    javarun="java_runsv_arm"
elif [ "$iso" == "x86_64" ];then
    javarun="java_runsv_x86"
fi


current_path=$(cd $(dirname $0);pwd)
export PATH=$PATH:$current_path
source /etc/profile
cd /home/jysp/workspace/nacos/bin
./startup.sh
#sleep 60

################################################
# 维护jar包数据源
################################################
# jar包服务
# javasv_attr字段说明:
# 参数一:1,2 一级目录
# 参数二:jar包存放目录
# 参数三:最小内存
# 参数四:最大内存
# 参数五:读取yml路径
#     空:使用统一指定的加载文件
#     1:默认加载文件顺序
#################################################
javasv=(
 jysp-da-business-authority-server-0.0.1-SNAPSHOT.jar
 jysp-da-plugin-fileserver-server-0.0.1-SNAPSHOT.jar
 jysp-da-plugin-gateway-0.0.1-SNAPSHOT.jar
 jysp-da-dataflow-patrol-robot-master-0.0.1-SNAPSHOT.jar
 jysp-da-business-system-server-0.0.1-SNAPSHOT.jar
 jysp_cruise-0.0.1-SNAPSHOT.jar
 jysp_cruise_algorithm-0.0.1-SNAPSHOT.jar
 jysp_device-0.0.1-SNAPSHOT.jar
 jysp_home_page-0.0.1-SNAPSHOT.jar
 jysp_ir_xj-0.0.1-SNAPSHOT.jar
 jysp_robot-0.0.1-SNAPSHOT.jar
 jysp_sequential_control-0.0.1-SNAPSHOT.jar
 jysp_system-0.0.1-SNAPSHOT.jar
 jysp_video-0.0.1-SNAPSHOT.jar
 jysp_voice_new-0.0.1-SNAPSHOT.jar
 jysp_warn-0.0.1-SNAPSHOT.jar
 jysp_web_new-0.0.1-SNAPSHOT.jar
 jysp_exchange-0.0.1-SNAPSHOT.jar
 jysp_hik_ir-0.0.1-SNAPSHOT.jar
)


declare -A javasv_attr
javasv_attr["${javasv[ 0]}"]="1,authority,256m,256m"
javasv_attr["${javasv[ 1]}"]="1,fileSever,2048m,2048m"
javasv_attr["${javasv[ 2]}"]="1,gateway,1024m,1024m"
javasv_attr["${javasv[ 3]}"]="1,robot,1024m,1024m"
javasv_attr["${javasv[ 4]}"]="1,system,1024m,1024m"
javasv_attr["${javasv[ 5]}"]="2,jysp_cruise,2048m,2048m"
javasv_attr["${javasv[ 6]}"]="2,jysp_cruise_algorithm,2048m,2048m"
javasv_attr["${javasv[ 7]}"]="2,jysp_device,4096m,4096m"
javasv_attr["${javasv[ 8]}"]="2,jysp_home_page,512m,512m"
javasv_attr["${javasv[ 9]}"]="2,jysp_ir_xj,1024m,1024m"
javasv_attr["${javasv[10]}"]="2,jysp_robot,1024m,1024m"
javasv_attr["${javasv[11]}"]="2,jysp_sequential_control,1024m,1024m"
javasv_attr["${javasv[12]}"]="2,jysp_system,512m,512m"
javasv_attr["${javasv[13]}"]="2,jysp_video,1024m,1024m"
javasv_attr["${javasv[14]}"]="2,jysp_voice_new,1024m,1024m"
javasv_attr["${javasv[15]}"]="2,jysp_warn,1024m,1024m"
javasv_attr["${javasv[16]}"]="2,jysp_web_new,1024m,1024m"
javasv_attr["${javasv[17]}"]="2,jysp_exchange,1024m,1024m,1"
javasv_attr["${javasv[18]}"]="2,jysp_hik_ir,1024m,1024m"


################################################
# 选择服务是动作:启动jar包
################################################
# 参数一:serv_id
#################################################
function java_start(){
  # 从服务列表中取出服务名
  local start_jar_name=$1
  local start_jar_attr=${javasv_attr[$start_jar_name]}
  # 查看 狗和jar程序运行情况
  pid_runsv=$(ps -ef | grep "$start_jar_name" | grep -v grep | grep  "java_runsv_" | awk '{print $2}')
  pid_java=$(ps -ef | grep "$start_jar_name" | grep -v grep | grep -v "java_runsv_" | awk '{print $2}')
  # 检查服务
  if [ "x$pid_runsv" != "x" ]
    then
      if [ "X$pid_java" != "X" ]
        then
          echo "$start_jar_name 正在运行"
          return
        else
          echo "$start_jar_name 的java_runsv正在运行,$start_jar_name 未运行,请检查"
          return
      fi
    else
      if [ "X$pid_java" != "X" ]
        then
          echo "$start_jar_name 正在运行,java_runsv未运行,请检查"
          return
      fi
  fi
  # 检查服务配置
  # 通过服务ID-->找到服务名-->找服务配置-->解析
  if [ -z "$start_jar_attr" ]; then
    echo -e "\e[31m"$start_jar_name'未配置【启动参数】'"\e[0m"
    return
  fi
  # 解析配置参数
  IFS=',' read -ra jar_attr_arr <<< "$start_jar_attr"
  if [ ${#jar_attr_arr[@]} != 4 -a ${#jar_attr_arr[@]} != 5 ]; then
      echo -e "\e[31m"$start_jar_name'配置参数个数有误'"\e[0m"
      return
  fi
  # echo ${jar_attr_arr[0]},${jar_attr_arr[0]},${jar_attr_arr[0]},${jar_attr_arr[0]}
  #  根据配置参数启动
  case ${jar_attr_arr[0]} in
    1)
      cd $current_path/jysp-da/${jar_attr_arr[1]}
      nohup $current_path/$javarun --L java -Xms${jar_attr_arr[2]} -Xmx${jar_attr_arr[3]} -jar $start_jar_name >/dev/null 2>&1 &
      ;;
    2)
      cd $current_path/jysp_cruise/${jar_attr_arr[1]}
      case ${jar_attr_arr[4]} in
        1)
          nohup $current_path/$javarun --L java -Xms${jar_attr_arr[2]} -Xmx${jar_attr_arr[3]} -jar $start_jar_name >/dev/null 2>&1 &
          ;;
        *)
          # 指定配置文件位置
          BOOTSTRAP_HOME=/home/jysp/workspace/bin/jar/jysp_cruise
          nohup $current_path/$javarun --L java -Xms${jar_attr_arr[2]} -Xmx${jar_attr_arr[3]} -jar $start_jar_name --spring.config.location=classpath:/,${BOOTSTRAP_HOME}/bootstrap.yml >/dev/null 2>&1 &
      esac
  esac
  sleep 5
  pid_java=`ps -ef | grep "$start_jar_name" | grep -v grep | grep -v "java_runsv_" | awk '{print $2}'`
  if [ "X$pid_java" == "X" ]
  then
     echo "'$start_jar_name'未运行"
  else
     echo "'$start_jar_name'启动成功,PID:$pid_java"
  fi
}


for serv_name in "${javasv[@]}"; do
  # 调用启动方法
  java_start $serv_name
done
exit 0


更新时间: 2024年2月23日星期五凌晨12点17分