2021-10-08

微服务下Linux批量启动jar/sh服务脚本

脚本代码

#!/bin/bash
# by  yyk 
##初始化参数
 
#服务名
SERVICE_NAME=(
	oauth
	gateway
	feign
	user
	collect
	dataapp
	analysis
	simulation
	devops
)
 
#服务启动包所在的目录,根据实际地址设置
SERVICE_PATH=(
	/usr/local/1.oauth/
	/usr/local/2.gateway/
	/usr/local/3.feign/
	/usr/local/4.user/
	/usr/local/5.collect/
	/usr/local/6.dataapp/
	/usr/local/7.analysis/
	/usr/local/8.simulation/
	/usr/local/9.devops/
)
 
#服务启动包
SERVICE_PACKAGE=(
	oauth_20210625_74ef12e6.jar
	gateway_20210625_74ef12e6.jar
	feign_20210625_74ef12e6.jar
	user_20210625_74ef12e6.jar
	hurys-bigdata-collect-20210903.jar
	dataapp_20210625_74ef12e6.jar
	analysis_20210625_725ec3d7.jar
	simulation_20210625_74ef12e6.jar
	devops_20210625_74ef12e6.jar
)
 
#	脚本提示信息
tips(){
  echo "-------------------------------------"
  echo "日志记入时间:" $(date +"%Y-%m-%d %H:%M:%S") >> nohup.out
  echo ""
	echo "Version:1.0"
	echo "Author:yyk"
	echo "Comment:"
	echo "  命令举例:sh philicube_start.sh - status"
	echo "  当前支持如下服务的启动:gateway、auth、redis..."
  echo "  启动参数:"
  echo "	  -status   -查看平台所有服务运行状态"
  echo "	  -start    -启动平台所有服务"
  echo "	  -stop     -停止平台所有服务"
  echo "	  -restart  -重启平台所有服务"
	echo "	  -gateway  -重启网关服务"
	echo "	  -auth     -重启权限服务"
	echo "	  -exchange -重启实时服务"
	echo "	  -eslog    -重启日志服务"
	echo "	  -message  -重启消息服务"
	echo "	  -ws  -重启PhiliWsGateway服务"
  echo ""
  echo "-------------------------------------"
}
 
#查看状态
status(){
echo ""
echo "---------查看状态 开始执行 ...-----------"
	for((i=0;i<${#SERVICE_NAME[@]};i++))
  do
    num=$((i+1))
    service_name=${SERVICE_NAME[i]}
    #查找pid之ps方法
    service_pid=$(ps -ef | grep "$service_name" | grep -v grep | grep -v bash | awk '{print $2}')
    if [ -z "$service_pid" ]; then
      echo "---	服务$num: 【$service_name】未运行!!!"
    else
      echo "---	服务$num: 【$service_name】【$service_pid】运行中..."
    fi
  done
echo "---------查看状态 执行完毕 !!!-----------"
echo ""
}
 
#一键启动
start(){
  echo ""
  echo "---------启动程序 开始执行 ...-----------"
	for((i=0;i<${#SERVICE_NAME[@]};i++))
	do
		num=$((i+1))
		service_name=${SERVICE_NAME[i]}
		service_path=${SERVICE_PATH[i]}
		service_package=${SERVICE_PACKAGE[i]}
		echo "---服务$num:【$service_name】开始启动 ..."
		echo "--- 服务目录地址为: $service_path"
		echo "--- 服务安装程序为: $service_package"
 
		cd "$service_path" || return
		#	path=`pwd`
    # echo "---	当前目录地址为:$path"
		##创建日志目录及文件
		echo "--- 初始化日志目录及文件..."
		TODAY=$(date +%Y-%m-%d)
		LOG_NAME="log-$TODAY.txt"
		FULL_LOG_NAME=logs/$LOG_NAME
		##创建文件夹
		if [ ! -d logs ];then
			mkdir logs
		fi
		##创建文件
		if [ ! -e "$FULL_LOG_NAME" ];then
			touch "$FULL_LOG_NAME"
		fi
 
		service_pid=$(ps -ef | grep "$service_name" | grep -v grep | grep -v bash | awk '{print $2}')
    if [ -n "$service_pid" ];then
      echo "--- $service_name进程存在,无需启动。当前进程为:$service_pid"
    else
      #启动服务
      echo "--- $service_name进程不存在,启动服务 ..."
 
      #获取文件名后缀,判定文件类型
      service_package=${SERVICE_PACKAGE[i]}
      extension=$(dealFileName "$service_package")
      if [ $extension = "jar" ];then
        #运行java服务并在后台执行
        nohup java -jar -Xmx512m -Xms512m "$service_package" --info >"$FULL_LOG_NAME" &
      elif [ "$extension" = "sh" ]; then
        #打开终端,执行命令
        gnome-terminal -x bash -c "./$service_package;"
        #睡1秒,等程序反应,否则可能拿不到pid
        sleep 1
      elif [ "$extension" = "out" ]; then
        #exec bash;是让打开的终端在执行完脚本后不关闭
        gnome-terminal -x bash -c "./$service_package;exec bash;"
        #睡1秒,等程序反应,否则可能拿不到pid
        sleep 1
      else
        echo "  未识别的文件类型,文件类型为:【$extension】"
      fi
 
      #判断服务启动成功
      service_pid_new=$(ps -ef | grep "$service_name" | grep -v grep | grep -v bash | awk '{print $2}')
      until [ -n "$service_pid_new" ]
        do
          service_pid_new=$(ps -ef | grep "$service_name" | grep -v grep | grep -v bash | awk '{print $2}')
        done
      echo "--- $service_name 启动完毕!!!当前进程为:$service_pid_new"
    fi
		sleep 1
	done
  echo "---------启动程序 执行完毕 !!!-----------"
  echo ""
}
 
#一键停止
stop(){
  echo ""
  echo "---------停止程序 开始执行 ...-----------"
	for((i=0;i<${#SERVICE_NAME[@]};i++))
	do
		num=$((i+1))
		service_name=${SERVICE_NAME[i]}
		service_pid=$(ps -ef | grep "$service_name" | grep -v grep | grep -v bash | awk '{print $2}')
		if [ "$service_pid" == "" ]; then
			echo "---	服务$num: 【$service_name】进程不存在或已停止运行!!!"
		else
			kill -9 "$service_pid"
			echo "---	服务$num: 【$service_name】停止成功。"
		fi
		sleep 1
	done
  echo "---------停止程序 执行完毕 !!!-----------"
  echo ""
}
 
#一键重启
restart(){
  echo ""
  echo "---------重启 开始执行 ...-----------"
	stop
	sleep 1
	start
	sleep 1
	status
  echo "---------重启 执行完毕 !!!-----------"
  echo ""
}
 
#重启某服务处理函数
reservice(){
	echo "---	获取参数 ..."
	service_name=$1
	service_path=$2
	service_package=$3
	echo "---	服务名称为:	【$service_name】"
	echo "---	服务目录地址为:$service_path"
	echo "---	服务安装程序为:$service_package"
  #到启动程序目录
	cd "$service_path" || return
	#	path=`pwd`
  # echo "---	当前目录地址为:$path"
 
	#创建日志目录及文件
	echo "---	初始化日志目录及文件..."
	TODAY=$(date +%Y-%m-%d)
	LOG_NAME="log-$TODAY.txt"
	FULL_LOG_NAME=logs/$LOG_NAME
	#创建文件夹
	if [ ! -d logs ];then
		mkdir logs
	fi
	#创建文件
	if [ ! -e "$FULL_LOG_NAME" ];then
		touch "$FULL_LOG_NAME"
	fi
	#检查服务是否存在进程,有则杀掉
	pid=$(ps -ef | grep "$service_name" | grep -v grep | grep -v bash | awk '{print $2}')
	if [  -n "$pid"  ]; then
	  echo "---	服务进程存在,pid=[$pid]关闭当前进程 ..."
		kill -9 "$pid"
		echo "---	清理进程后,启动 ..."
	else
		echo "---	服务进程不存在 ..."
	fi
 
	#获取文件名后缀,判定文件类型
  extension=$(dealFileName "$service_package")
  if [ $extension = "jar" ];then
    #运行java服务并在后台执行
    nohup java -jar -Xmx512m -Xms512m "$service_package" --info >"$FULL_LOG_NAME" &
  elif [ "$extension" = "sh" ]; then
    #打开终端,执行命令
    gnome-terminal -x bash -c "./$service_package;"
    #睡1秒,等程序反应,否则可能拿不到pid
    sleep 1
  elif [ "$extension" = "out" ]; then
     #exec bash;是让打开的终端在执行完脚本后不关闭
    gnome-terminal -x bash -c "./$service_package;exec bash;"
    #睡1秒,等程序反应,否则可能拿不到pid
    sleep 1
  else
    echo "  未识别的文件类型,文件类型为:【$extension】"
  fi
 
  #service_pid_new=$(ps -ef | grep "$service_name" | grep -v "grep" | awk '{print $2}')
  service_pid_new=$(ps -ef | grep "$service_name" | grep -v grep | grep -v bash | awk '{print $2}')
  until [ -n "$service_pid_new" ]
    do
      service_pid_new=$(ps -ef | grep "$service_name" | grep -v grep | grep -v bash | awk '{print $2}')
    done
  echo "---	服务已启动,当前进程为:$service_pid_new"
}
#解析传入的文件名,获取后缀
#支持带路径,格式如:/the/path/foo.txt
# 返回值对应文件类型 1 jar 2 sh 3 out
dealFileName(){
	fullfile=$1
	dir=$(dirname "$fullfile")
  fullname=$(basename "$fullfile")
  filename=$(echo "$fullname" | cut -d . -f1)
  extension=$(echo "$fullname" | cut -d . -f2)
#  echo "  dir       =   $dir"
#  echo "  fullname  =   $fullname"
#  echo "  filename  =   $filename"
#  echo "  extension =   $extension"
  if [ "$extension" = "jar" ];then
    echo "jar"
  elif [ "$extension" = "sh" ]; then
    echo "sh"
  elif [ "$extension" = "out" ]; then
    echo "out"
  else
    echo "other"
  fi
}
#网关服务
gateway(){
  echo ""
  echo "---------网关服务 程序开始执行 ... -----------"
	service_name=${SERVICE_NAME[0]}
	service_path=${SERVICE_PATH[0]}
	service_package=${SERVICE_PACKAGE[0]}
	reservice "$service_name" "$service_path" "$service_package"
  echo "---------网关服务 程序执行完毕 !!!-----------"
  echo ""
}
 
#权限服务
auth(){
  echo ""
  echo "---------权限服务 程序开始执行 ... -----------"
	service_name=${SERVICE_NAME[1]}
	service_path=${SERVICE_PATH[1]}
	service_package=${SERVICE_PACKAGE[1]}
	reservice "$service_name" "$service_path" "$service_package"
  echo "---------权限服务 程序执行完毕 !!!-----------"
  echo ""
}
 
#实时服务
exchange(){
  echo ""
  echo "---------实时服务 程序开始执行 ... -----------"
	service_name=${SERVICE_NAME[2]}
	service_path=${SERVICE_PATH[2]}
	service_package=${SERVICE_PACKAGE[2]}
	reservice "$service_name" "$service_path" "$service_package"
  echo "---------实时服务 程序执行完毕 !!! -----------"
  echo ""
}
 
#日志服务
eslog(){
  echo ""
  echo "---------日志服务 程序开始执行 ... -----------"
	service_name=${SERVICE_NAME[3]}
	service_path=${SERVICE_PATH[3]}
	service_package=${SERVICE_PACKAGE[3]}
	reservice "$service_name" "$service_path" "$service_package"
  echo "---------日志服务 程序执行完毕 !!!-----------"
  echo ""
}
 
#消息服务
message(){
  echo ""
  echo "---------消息服务 程序开始执行 ... -----------"
	service_name=${SERVICE_NAME[4]}
	service_path=${SERVICE_PATH[4]}
	service_package=${SERVICE_PACKAGE[4]}
	reservice "$service_name" "$service_path" "$service_package"
  echo "---------消息服务 程序执行完毕 !!!-----------"
  echo ""
}
 
#消息服务
ws(){
  echo ""
  echo "---------消息服务 程序开始执行 ... -----------"
	service_name=${SERVICE_NAME[5]}
	service_path=${SERVICE_PATH[5]}
	service_package=${SERVICE_PACKAGE[5]}
	reservice "$service_name" "$service_path" "$service_package"
  echo "---------消息服务 程序执行完毕 !!!-----------"
  echo ""
}
 
#终端输入参数调用
case "$1" in
	"-status")
     status
     ;;
    "-start")
     start
     ;;
    "-stop")
     stop
     ;;
    "-restart")
     restart
     ;;
	"-gateway")
     gateway
     ;;
	 "-auth")
     auth
     ;;
	"-exchange")
     exchange
     ;;
	 "-eslog")
     eslog
     ;;
	 "-message")
     message
     ;;
   "-ws")
     ws
     ;;
    *)
     tips
     ;;
esac    
exit 0;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值