SpringCloud部署Shell方式

2 篇文章 0 订阅
1 篇文章 0 订阅

SpringCloud部署Shell方式

练手脚本别太当真
脱离docker方式直接部署在服务器上
八个jar服务:registry, gateway,task, system, server_name, app, jar1, jar2
四个应用服务:nginx, vsftpd, redis, mysqld
脚本已脱敏,centos7使用,centos6的话只需要修改vsftpd mysql等应用服务的启动方式即可
脚本功能:server的一键安装(子脚本)、运行、重启

#!/usr/bin/env sh

server_name_dir=/opt/server_name/service/
redis_dir=/usr/local/redis/
jdk_dir=/usr/lib/jvm

HELP() {
echo "NAME:
   server_name - 命令行工具, 用于快速部署安装server_name平台.
USAGE:
   server_name command [options] service_name

COMMANDS:
   create     创建并启动服务, 部署新环境或清空后用该指令 
   clear      慎用:清空已安装资源 (卸载应用服务,保留数据) 

   start      启动指定服务
   restart    重启指定服务
   stop       关闭指定服务
	***后接 all 指所有服务
   --help, -h    Shows a list of commands or help for one command

SERVICE:
   gateway, server_name, jar1, app, task, system, registry, nginx, vsftpd, redis, mysqld
"
}

[[ $# -eq 0 || "$1" == "-h" || "$1" == "--help" ]] && HELP && exit 1

export REGISTRY_port=1299
export DEVICE_port=1272
export SYSTEM_port=1275
export TASK_port=1273
export SERVER_NAME_port=1271
export GATEWAY_port=1270
export JAR2_port=1276
export APP_port=1274
export NGINX_port=443
export VSFTPD_port=21
export MYSQL_port=3306
export REDIS_port=6379
app_jvm="-Xms300m -Xmx300m"
jar1_jvm="-Xms1g -Xmx1g"
gateway_jvm="-Xms1g -Xmx1g"
registry_jvm="-Xms300m -Xmx300m"
jar2_jvm=" "
system_jvm="-Xms2g -Xmx2g"
task_jvm="-Xms2g -Xmx2g"
server_name_jvm="-Xms2g -Xmx2g"

#服务器内存小于16G时,由jar服务自己分配jvm内存
Jvm_flag=1
Mem_Total=$(expr `free | grep "Mem" | awk '{print $2}'` / 1024 / 1024)
[ ${Mem_Total} -lt 15 ] && Jvm_flag=0 
#判断有没有netstat命令
netstat -tlnp &>/dev/null || rpm -ivh --nodeps --force /opt/server_name/install/netstat/*.rpm &> /dev/null
GET_PID() {
	registry_pid=`	netstat -tlnp	|grep -w ${REGISTRY_port}|cut -d "/" -f 1|awk '{printf $NF}' 2> /dev/null`
	jar1_pid=`		netstat -tlnp	|grep -w ${DEVICE_port}	|cut -d "/" -f 1|awk '{printf $NF}' 2> /dev/null`
	system_pid=`	netstat -tlnp	|grep -w ${SYSTEM_port}	|cut -d "/" -f 1|awk '{printf $NF}' 2> /dev/null`
	task_pid=`		netstat -tlnp	|grep -w ${TASK_port}	|cut -d "/" -f 1|awk '{printf $NF}' 2> /dev/null`
	server_name_pid=`netstat -tlnp	|grep -w ${SERVER_NAME_port}|cut -d "/" -f 1|awk '{printf $NF}' 2> /dev/null`
	gateway_pid=`	netstat -tlnp	|grep -w ${GATEWAY_port}|cut -d "/" -f 1|awk '{printf $NF}' 2> /dev/null`
	jar2_pid=`		netstat -tlnp	|grep -w ${JAR2_port}	|cut -d "/" -f 1|awk '{printf $NF}' 2> /dev/null`
	app_pid=`		netstat -tlnp	|grep -w ${APP_port}	|cut -d "/" -f 1|awk '{printf $NF}' 2> /dev/null`
	nginx_pid=`		netstat -tlnp	|grep -w ${NGINX_port}	|cut -d "/" -f 1|awk '{printf $NF}' 2> /dev/null`
	vsftpd_pid=`	netstat -tlnp	|grep -w ${VSFTPD_port}	|cut -d "/" -f 1|awk '{printf $NF}' 2> /dev/null`
	mysql_pid=`		netstat -tlnp	|grep -w ${MYSQL_port}	|cut -d "/" -f 1|awk '{printf $NF}' 2> /dev/null`
	redis_pid=`		netstat -tlnp	|grep -w ${REDIS_port}	|cut -d "/" -f 1|awk '{printf $NF}' 2> /dev/null`
}
GET_PID

[ -d /opt/system/log/registry-service	 ] || `/usr/bin/mkdir -p /opt/system/log/registry-service`
[ -d /opt/system/log/jar2-service		 ] || `/usr/bin/mkdir -p /opt/system/log/jar2-service`
Jar_timeout_flag=0  #用于超时提示
#Usage: START ServerName ServerPort
START() {
	echo "--------${1} 开始启动--------------"
	to_log="/dev/null 2>&1"
	[ ${1} == "registry"	 ] && to_log=/opt/system/log/registry-service/info.log
	[ ${1} == "jar2"		 ] && to_log=/opt/system/log/jar2-service/info.log
	var_cache=${1}_jvm
	[ ${1} != "share-room" ] && jvm=`eval echo '$'${var_cache}` || jvm=$share_room_jvm
	[ ${Jvm_flag} -eq 0 ] && jvm=" "
    nohup java -jar  ${jvm} ${server_name_dir}${1}/app.jar --spring.config.additional-location=file:${server_name_dir}${1}/config.properties &> ${to_log} &
        nohup java -jar  ${server_name_dir}${1}/app.jar --spring.config.additional-location=file:${server_name_dir}${1}/config.properties &> ${to_log} &
	sleep 10
	for (( i=1;i<=20;i++ ));do
		sleep 5
		# 这里之所以不用 $! ,因为 jar 运行需要一段时间 且之后还要判段该进程是否存活
        	SERVER_pid=`netstat -tlnp|grep -w ${2}|cut -d "/" -f 1|awk '{printf $NF}' 2> /dev/null`
        	if [ -n "$SERVER_pid" ];then 
			echo "${1} pid is $SERVER_pid"
			eval ${1}_pid=${SERVER_pid} 
        		echo -e "--------\033[32m${1} 启动成功\033[0m--------------"
			break
		fi
	done
	[ -z "$SERVER_pid" ] && echo -e "--------\033[31m${1} 启动超时 \033[0m--------------" && Jar_timeout_flag=1 
	#&& exit ${2}
	return 0
}

echo "`date`"
if [ "$1" == "start" ];then
	source /etc/profile.d/jdk-13.sh 
	[ $? != "0" ] && echo "请检查当前jdk是否是/etc/profile.d/jdk-13.sh" && exit 1
	[ $Jvm_flag -eq 0 ] && echo "Warning: server memory is less than 16GB"
	case "$2" in
	"registry")
		## 启动registry
        [ -z "${registry_pid}"	 ] && START "registry" ${REGISTRY_port} || echo "$2 It's already running"
		exit 0	;;
	"jar1")
		## 启动DEVICE
        [ -z "${jar1_pid}"		 ] && START "jar1" ${DEVICE_port} || echo "$2 It's already running"
		exit 0	;;
	"system")
		## 启动SYSTEM
        [ -z "${system_pid}"	 ] && START "system" ${SYSTEM_port} || echo "$2 It's already running"
		exit 0	;;
	"task")
		## 启动TASK
        [ -z "${task_pid}"		 ] && START "task" ${TASK_port} || echo "$2 It's already running"
		exit 0	;;
	"server_name")
		## 启动SERVER_NAME
        [ -z "${server_name_pid}"] && START "server_name" ${SERVER_NAME_port} || echo "$2 It's already running" 
		exit 0	;;
	"gateway")
		## 启动GATEWAY
        [ -z "${gateway_pid}"	 ] && START "gateway" ${GATEWAY_port} || echo "$2 It's already running" 
		exit 0	;;
	"jar2" | "jar2")
		## 启动JAR2
        [ -z "${jar2_pid}"		 ] && START "jar2" ${JAR2_port} || echo "$2 It's already running" 
		exit 0 ;;
	"app")
		[ -z "${app_pid}"		 ] && START "app" ${APP_port} || echo "$2 It's already running" 
		exit 0	;;
	"nginx")
		[ -z "${nginx_pid}"		] && nginx && echo "start $2 success" || echo "$2 It's already running"
		exit 0  ;;
	"vsftpd")
        [ -z "${vsftpd_pid}"	 ] && systemctl start vsftpd && echo "start $2 success" || echo "$2 It's already running"
                exit 0  ;;
	"mysql")
		[ -z "${mysql_pid}"		 ] && systemctl start mysqld && echo "start $2 success" || echo "$2 It's already running"
         exit 0  ;;
	"redis")  # redis set "daemonize yes"
         [ -z "${redis_pid}"	 ] && ${redis_dir}src/redis-server ${server_name_dir}/redis/redis.conf  && echo "start $2 success" || echo "$2 It's already running"
         exit 0  ;;
	all)
	        echo "===Please wait while starting the service==="
		## 启动nginx mysql vsftpd redis 等应用服务
		[ -z "${nginx_pid}"		 ] && nginx && echo "start nginx success" || echo "nginx It's already running"
		[ -z "${vsftpd_pid}"	 ] && systemctl start vsftpd &>/dev/null && echo "start vsftpd success" || echo "vsftpd It's already running"
		[ -z "${mysql_pid}"		 ] && systemctl start mysqld &>/dev/null && echo "start mysql success" || echo "mysql It's already running"
		[ -z "${redis_pid}"		 ] && ${redis_dir}src/redis-server ${server_name_dir}redis/redis.conf  && echo "start redis success" || echo "redis It's already running"
		## 启动registry
		[ -z "${registry_pid}"	 ] && START "registry" ${REGISTRY_port}	 || echo "registry It's already running"
		## 启动SYSTEM
		[ -z "${system_pid}"	 ] && START "system" ${SYSTEM_port}	 || echo "system It's already running"
		## 启动TASK
		[ -z "${task_pid}"		 ] && START "task" ${TASK_port}		 || echo "task It's already running"
		## 启动SERVER_NAME
		[ -z "${server_name_pid}"] && START "server_name" ${SERVER_NAME_port}	 || echo "server_name It's already running"
		## 启动GATEWAY
		[ -z "${gateway_pid}"	 ] && START "gateway" ${GATEWAY_port}	 || echo "gateway It's already running"
		## 启动JAR2
		[ -z "${jar2_pid}"		 ] && START "jar2" ${JAR2_port}		 || echo "jar2 It's already running"
	        ## 启动DEVICE
		sleep 10
		[ -z "${jar1_pid}"		 ] && START "jar1" ${DEVICE_port}	 || echo "jar1 It's already running"
		## 启动APP
		[ -z "${app_pid}"		 ] && START "app" ${APP_port}		 || echo "app It's already running"
		[ ${Jar_timeout_flag} -eq 1 ] && echo -e "\033[31m 服务启动超时原因: \033[0m \n 1.jar服务的配置参数有误 \n 2.服务器CPU性能问题,命令执行完后需多等待一会"
		echo -e "===\033[32mstart All service success\033[0m==="
	    exit 0
		;;
	*)
        HELP
        ;;
	esac		 
elif [ "$1" == "stop" ];then
	case "$2" in
	registry)
		## 关闭registry
        [ -n "${registry_pid}"	 ] && kill -9 ${registry_pid}	 && sleep 6
		echo "$2 stop success"
		exit 0	;;
	jar1)
		## 关闭jar1
        [ -n "${jar1_pid}"		 ] && kill -9 ${jar1_pid}	 && sleep 6
		echo "$2 stop success"
		exit 0	;;
	system)
		## 关闭system
        [ -n "${system_pid}"	 ] && kill -9 ${system_pid}	 && sleep 6
		echo "$2 stop success"
		exit 0	;;
	server_name)
        ## 关闭server_name
        [ -n "${server_name_pid}"] && kill -9 ${server_name_pid} && sleep 6
        echo "$2 stop success"
        exit 0  ;;
	task)
		## 关闭task
        [ -n "${task_pid}"		 ] && kill -9 ${task_pid}	 && sleep 6
		echo "$2 stop success"
		exit 0	;;
	gateway)
		## 关闭gateway
        [ -n "${gateway_pid}"	 ] && kill -9 ${gateway_pid}	 && sleep 6
		echo "$2 stop success"
		exit 0  ;;
	"jar2" | "jar2")
		## 关闭jar2
        [ -n "${jar2_pid}"		 ] && kill -9 ${jar2_pid}	 && sleep 6
		echo "$2 stop success"
		exit 0  ;;
	app)
		## 关闭app
        [ -n "${app_pid}"		 ] && kill -9 ${app_pid}	 && sleep 6
		echo "$2 stop success"
		exit 0	;;
	nginx)
		[ -n "${nginx_pid}"		 ] && nginx -s stop		 && sleep 6
        echo "$2 stop success"
         exit 0  ;;
	vsftpd)
		[ -n "${vsftpd_pid}"	 ] && systemctl stop vsftpd	 && sleep 6
        echo "$2 stop success"
        exit 0  ;;
	mysql)
		[ -n "${mysql_pid}"		 ] && systemctl stop mysqld	 && sleep 6
        echo "$2 stop success"
        exit 0  ;;
	redis)
		[ -n "${redis_pid}"	 ] && kill -9 ${redis_pid}	 && sleep 6
		echo "$2 stop success"
        exit 0  ;;
	 all)
		echo "===Please wait while the service is being suspended==="
		## 关闭 nginx mysql vsftpd redis 等应用服务
		[ -n "${nginx_pid}"		 ] && nginx -s stop &> /dev/null
		[ -n "${vsftpd_pid}"	 ] && systemctl stop vsftpd
		[ -n "${mysql_pid}"		 ] && systemctl stop mysqld 
		[ -n "${redis_pid}"		 ] && kill -9 ${redis_pid}
		## 关闭registry
		[ -n "${registry_pid}"	 ] && kill -9 ${registry_pid}
		## 关闭jar1
		[ -n "${jar1_pid}"		 ] && kill -9 ${jar1_pid}
		## 关闭system 
		[ -n "${system_pid}"	 ] && kill -9 ${system_pid}
		## 关闭task
		[ -n "${task_pid}"		 ] && kill -9 ${task_pid}
		## 关闭server_name
		[ -n "${server_name_pid}"] && kill -9 ${server_name_pid}
		## 关闭gateway
		[ -n "${gateway_pid}"	 ] && kill -9 ${gateway_pid}
		## 关闭jar2
		[ -n "${jar2_pid}"		 ] && kill -9 ${jar2_pid}
		## 关闭app
	    [ -n "${app_pid}"		 ] && kill -9 ${app_pid}
		sleep 20
		echo -e "===\033[32m all service stop success\033[0m==="
	    exit 0
		;;   
	*)
		HELP
		;;
	esac
elif [ "$1" == "restart" ];then
	echo "===Please wait while restarting==="
	$0 stop $2
	#sleep 20
	$0 start $2
	echo -e "===\033[32m restart success\e[0m==="
elif [ "$1" == "create" ];then
	sh_dir=/opt/server_name/bin
	cd $sh_dir
	echo "===system initialization==="
	sh init.sh > /dev/null
	echo "===Installing service==="
	# 以下均是应用服务的安装及初始化脚本
	# mysql
	sh mysql-service.sh &> /dev/null 
	# nginx
	sh nginx-service.sh &> /dev/null 
	# gcc redis
	sh redis-service.sh &> /dev/null 
	# vsftpd
	sh vsftpd-service.sh &> /dev/null 
	# openjdk
	sh openjdk.sh &> /dev/null
	# ntp
	sh ntp.sh &> /dev/null
	#rsync
	#sh rsync.sh &> /dev/null
	$0 start all
	exit 0

elif [ "$1" == "clear" ];then
	# remove rpm
	$0 stop all
	services=(mysql nginx vsftpd inotify )
	echo "Removing all services..."
	for i in ${servicesi[*]};do
		rpm -qa|grep $i|xargs rpm -e --nodeps > /dev/null
	done
	rm -rf "${redis_dir}" > /dev/null
	rm -rf "${jdk_dir}" > /dev/null
	#rm -rf /opt/system/log/*
	exit 0
else
	HELP
	exit 1
fi
exit 0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值