频道栏目
首页 > 资讯 > 其他 > 正文

部署linux下微服务应用启停脚本-积小流,成江海-51CTO博客

20-05-14        来源:[db:作者]  
收藏   我要投稿

话不多说直接上脚本,比较简单基本都能看懂,无非是启动应用前后加了一些判断而已。

#!/bin/bash
#
#?SCRIPT:????app_operation.sh
#?DATE:??????2020/03/13?
#?DESC:??????设置SDWAN应用启停
#?AUTHOR:????Mright
#?VERSION:???V1.0
#?V1.0:??????创建后台应用启停脚本
#?*****************************BEGIN?ARGUS*************************
set?-o?pipefail
source?~/.bash_profile
SERNAME=$1
INPUT=$2
SERNAME=${SERNAME:="NULL"}
OPER=${INPUT:="stat"}
SERPID="null"
JARDIR="${HOME}"
SCRIPTDIR="${JARDIR}"
TMPPID="${JARDIR}"
LOGDIR="/tmp"
LOGNAME="/tmp/app_operation_$(hostname).log"
APPLOGNAME="${JARDIR}/logs/${INPUT}.log"
APPINFOFILE="${HOME}/version.info"
CURRENTID=$(cat?${APPINFOFILE}|grep?"${SERNAME}_latest"|awk?-F?':'?'{print?$2}')

#?网关应用名
ZUULAPPNAME="example-sdwan-api-gateway-${CURRENTID}.jar"
#?SITE应用名
SITEAPPNAME="example-sdwan-nw-site-${CURRENTID}.jar"
#?DEVICE应用名
DEVICEAPPNAME="example-sdwan-nw-device-${CURRENTID}.jar"
BASEPATH="${HOME}"
ZUULAPPPATH="${BASEPATH}/example-sdwan-api-gateway"
SITEAPPPATH="${BASEPATH}/example-sdwan-nw-site"
DEVICEAPPPATH="${BASEPATH}/example-sdwan-nw-device"
#?*****************************END?ARGUS*************************
#?*****************************DEFAULTS?USEAGE*******************
function?defaults(){
???echo?"eg.?sh?app_operation.sh?<site|zuul|device>?<stat|start|stop|restart>"
}

#?*****************************DEFAULTS?USEAGE*******************
function?checkInput(){
????[?!?-d?${JARDIR}?]&&?mkdir?-p?${JARDIR}
????#[?!?-d?${SCRIPTDIR}?]&&?mkdir?-p?${SCRIPTDIR}
????if?[?${SERNAME}?==?"NULL"?];then
????????echo?"$(log_error)所操作服务名不能为空,请重新输入!"
????????defaults
????????exit?10
????elif?[?${SERNAME}?!=?"site"?-a?${SERNAME}?!=?"eureka"?-a?${SERNAME}?!=?"zuul"?-a?${SERNAME}?!=?"device"?];then
????????echo?"$(log_error)所输入服务名错误,请重新输入!"
????????defaults
????????exit?11
????fi
}
#?********************?FUNCTION?log_info?BEGIN?**************************
function?log_info(){
	echo?"[$(date?+'%Y-%m-%d?%H:%M:%S')][INFO]"
}
#?********************?FUNCTION?log_info?END?***************************
#?********************?FUNCTION?log_info?BEGIN?**************************
function?log_error(){
	echo?"[$(date?+'%Y-%m-%d?%H:%M:%S')][ERROR]"
}
#?********************?FUNCTION?log_info?END?***************************
function?getPid(){
	case?${SERNAME}?in
		"zuul")
	???declare?-a?FLAG
	???count=0
	???PATTERN=$(echo?"${ZUULAPPNAME}"|grep?-o?".*[^0-9.jar]"|sed?-r?"s/-$//g")
	???SERPID=$(ps?-ef|grep?"${PATTERN}"|grep?-v?"grep"|awk?'{print?$2}')
	???#SERPID=${SERPID:=110}
	???for?pro?in?${SERPID};do
	??????FLAG[$count]=$pro
	??????let?count++
	???done
	???if?[?${#FLAG[*]}?-gt?0?];then
	???????echo?${SERPID}>?${ZUULAPPPATH}/${SERNAME}.pid
	???else
	???		?[?-f?${ZUULAPPPATH}/${SERNAME}.pid?]&&{?rm?-f?${ZUULAPPPATH}/${SERNAME}.pid;}
	???fi
	???;;
	???"device")
	???declare?-a?FLAG
	???count=0
	???PATTERN=$(echo?"${DEVICEAPPNAME}"|grep?-o?".*[^0-9.jar]"|sed?-r?"s/-$//g")
	???SERPID=$(ps?-ef|grep?"${PATTERN}"|grep?-v?"grep"|awk?'{print?$2}')
	???
	???#SERPID=${SERPID:=110}
	???for?pro?in?${SERPID};do
	??????FLAG[$count]=$pro
	??????let?count++
	???done
	???if?[?${#FLAG[*]}?-gt?0?];then
	???????echo?${SERPID}>?${DEVICEAPPPATH}/${SERNAME}.pid?
	???else
	???		?[?-f?${DEVICEAPPPATH}/${SERNAME}.pid?]&&{?rm?-f?${DEVICEAPPPATH}/${SERNAME}.pid;}
	???fi
	???;;
	???"site")
	???declare?-a?FLAG
	???count=0
	???PATTERN=$(echo?"${SITEAPPNAME}"|grep?-o?".*[^0-9.jar]"|sed?-r?"s/-$//g")
	???SERPID=$(ps?-ef|grep?"${PATTERN}"|grep?-v?"grep"|awk?'{print?$2}')
	???
	???#SERPID=${SERPID:=110}
	???for?pro?in?${SERPID};do
	??????FLAG[$count]=$pro
	??????let?count++
	???done
	???if?[?${#FLAG[*]}?-gt?0?];then
	???????echo?${SERPID}>?${SITEAPPPATH}/${SERNAME}.pid?
	???else
	???		?[?-f?${SITEAPPPATH}/${SERNAME}.pid?]&&{?rm?-f?${SITEAPPPATH}/${SERNAME}.pid;}
	???fi
	???;;
	???"eureka")
	???	echo?"该应用暂未记录"
	???;;
	???*)
	???	defaults
	???	;;
	esac
	???
}
function?operation(){
	case?${SERNAME}?in
????????"zuul")
???????????case?${OPER}?in
???????????		"stat")
		???????????if?[?-f?${ZUULAPPPATH}/${SERNAME}.pid?];then
		??????????????echo?"$(log_info)${SERNAME}?应用已启动,进程ID为$(cat?${ZUULAPPPATH}/${SERNAME}.pid)"
		???????????else
		??????????????echo?"$(log_info)${SERNAME}?应用未启动!"?
		???????????fi
		???????????;;
		???????????"start")
		???????????	if?[?-f?${ZUULAPPPATH}/${SERNAME}.pid?];then
			??????????????echo?"$(log_info)${SERNAME}?应用已启动,进程ID为$(cat?${ZUULAPPPATH}/${SERNAME}.pid)"
			??????????else
			??????????		cd?${ZUULAPPPATH}
			??????????????echo?"$(log_info)${SERNAME}?应用准备启动...?"			??????????????
			??????????????nohup?java?-Xms1024m?-Xmx2048m?-jar?-Dspring.config.location=./application-1.properties?${ZUULAPPPATH}/${ZUULAPPNAME}?&>/dev/null?&			??????????????
			??????????????#?获取应用进程ID写入pid文件
			??????????????sleep?10
			??????????????getPid?${SERNAME}
			??????????????[?!?-f?${ZUULAPPPATH}/${SERNAME}.pid?]&&?echo?"$(log_error)${SERNAME}启动失败!"&&exit?12||?echo?"$(log_info)${SERNAME}启动成功,进程ID为${SERPID}."			?????????
			??????????fi?
			?????????;;
			?????????"restart")
			?????????	if?[?-f?${ZUULAPPPATH}/${SERNAME}.pid?];then
		????????????????echo?"$(log_info)${SERNAME}准备停止应用..."
		????????????????kill?$(cat?${ZUULAPPPATH}/${SERNAME}.pid)
		????????????????sleep?3
		??????????????[?$??-eq?0?]&&?rm?-f?${ZUULAPPPATH}/${SERNAME}.pid?&&echo?"$(log_info)${SERNAME}已停止。"||{?echo?"$(log_error)${SERNAME}停止失败。"&&exit?13;}
		????????????????echo?"$(log_info)${SERNAME}准备启动应用..."		????????????????
		????????????????#nohup?java?-jar?${ZUULAPPPATH}/${ZUULAPPNAME}?&>/dev/null?&
		????????????????cd?${ZUULAPPPATH}	
		????????????????nohup?java?-Xms1024m?-Xmx2048m?-jar?-Dspring.config.location=./application-1.properties?${ZUULAPPPATH}/${ZUULAPPNAME}?&>/dev/null?&	????????????????
		????????????????sleep?10
		????????????????getPid?${SERNAME}
		??????????????[?!?-f?${ZUULAPPPATH}/${SERNAME}.pid?]&&{?echo?"$(log_error)${SERNAME}启动失败!"&&exit?12;}||?echo?"$(log_info)${SERNAME}启动成功,进程ID为${SERPID}."
		????????????else
		???????????????echo?"$(log_info)${SERNAME}准备启动应用..."		???????????????
		???????????????cd?${ZUULAPPPATH}	
		???????????????nohup?java?-Xms1024m?-Xmx2048m?-jar?-Dspring.config.location=./application-1.properties?${ZUULAPPPATH}/${ZUULAPPNAME}?&>/dev/null?&			???????????????
		???????????????sleep?10
		???????????????getPid?${SERNAME}
		???????????????[?!?-f?${ZUULAPPPATH}/${SERNAME}.pid?]&&{?echo?"$(log_error)${SERNAME}启动失败!"&&exit?12;}||?echo?"$(log_info)${SERNAME}启动成功,进程ID为${SERPID}."
		????????????fi
			????????;;
			????????"stop")
			????????	
			?????????	if?[?-f?${ZUULAPPPATH}/${SERNAME}.pid?];then
		????????????????echo?"$(log_info)${SERNAME}准备停止应用..."
		????????????????kill?$(cat?${ZUULAPPPATH}/${SERNAME}.pid)
		????????????????sleep?3
		??????????????	[?$??-eq?0?]&&?rm?-f?${ZUULAPPPATH}/${SERNAME}.pid?&&echo?"$(log_info)${SERNAME}已停止。"||{?echo?"$(log_error)${SERNAME}停止失败。"&&exit?13;}		???????????????
		????????????else
		???????????????echo?"$(log_info)${SERNAME}已经停止..."		???????????????
		????????????fi
			????????;;
		???????esac????
?????????;;
????????"site")
???????????case?${OPER}?in
???????????		"stat")
		???????????if?[?-f?${SITEAPPPATH}/${SERNAME}.pid?];then
		??????????????echo?"$(log_info)${SERNAME}?应用已启动,进程ID为$(cat?${SITEAPPPATH}/${SERNAME}.pid)"
		???????????else
		??????????????echo?"$(log_info)${SERNAME}?应用未启动!"?
		???????????fi
		???????????;;
		???????????"start")
		???????????	if?[?-f?${SITEAPPPATH}/${SERNAME}.pid?];then
			??????????????echo?"$(log_info)${SERNAME}?应用已启动,进程ID为$(cat?${SITEAPPPATH}/${SERNAME}.pid)"
			??????????else
			??????????????echo?"$(log_info)${SERNAME}?应用准备启动...?"
			??????????????cd?${SITEAPPPATH}	
		????????????????nohup?java?-Xms1024m?-Xmx2048m?-jar?-Dspring.config.location=./application-1.properties?${SITEAPPPATH}/${SITEAPPNAME}?&>/dev/null?&
			??????????????sleep?10
			??????????????#?获取应用进程ID写入pid文件
			??????????????getPid?${SERNAME}
			??????????????[?!?-f?${SITEAPPPATH}/${SERNAME}.pid?]&&?echo?"$(log_error)${SERNAME}启动失败!"&&exit?12||?echo?"$(log_info)${SERNAME}启动成功,进程ID为${SERPID}."			?????????
			??????????fi?
			?????????;;
			?????????"restart")
			?????????	if?[?-f?${SITEAPPPATH}/${SERNAME}.pid?];then
		????????????????echo?"$(log_info)${SERNAME}准备停止应用..."
		????????????????kill?$(cat?${SITEAPPPATH}/${SERNAME}.pid)
		????????????????sleep?3
		??????????????	[?$??-eq?0?]&&?rm?-f?${SITEAPPPATH}/${SERNAME}.pid?&&echo?"$(log_info)${SERNAME}已停止。"||{?echo?"$(log_error)${SERNAME}停止失败。"&&exit?13;}
		????????????????echo?"$(log_info)${SERNAME}准备启动应用..."
		????????????????cd?${SITEAPPPATH}	
		????????????????nohup?java?-Xms1024m?-Xmx2048m?-jar?-Dspring.config.location=./application-1.properties?${SITEAPPPATH}/${SITEAPPNAME}?&>/dev/null?&
		????????????????sleep?10
		????????????????getPid?${SERNAME}
		??????????????	[?!?-f?${SITEAPPPATH}/${SERNAME}.pid?]&&{?echo?"$(log_error)${SERNAME}启动失败!"&&exit?12;}||?echo?"$(log_info)${SERNAME}启动成功,进程ID为${SERPID}."
		????????????else
		???????????????echo?"$(log_info)${SERNAME}准备启动应用..."
		???????????????cd?${SITEAPPPATH}	
		???????????????nohup?java?-Xms1024m?-Xmx2048m?-jar?-Dspring.config.location=./application-1.properties?${SITEAPPPATH}/${SITEAPPNAME}?&>/dev/null?&
		???????????????sleep?10
		???????????????getPid?${SERNAME}
		???????????????[?!?-f?${SITEAPPPATH}/${SERNAME}.pid?]&&{?echo?"$(log_error)${SERNAME}启动失败!"&&exit?12;}||?echo?"$(log_info)${SERNAME}启动成功,进程ID为${SERPID}."
		????????????fi
			????????;;
			????????"stop")
			?????????	if?[?-f?${SITEAPPPATH}/${SERNAME}.pid?];then
		????????????????echo?"$(log_info)${SERNAME}准备停止应用..."
		????????????????kill?$(cat?${SITEAPPPATH}/${SERNAME}.pid)
		????????????????sleep?3
		??????????????	[?$??-eq?0?]&&?rm?-f?${SITEAPPPATH}/${SERNAME}.pid?&&echo?"$(log_info)${SERNAME}已停止。"||{?echo?"$(log_error)${SERNAME}停止失败。"&&exit?13;}		???????????????
		????????????else
		???????????????echo?"$(log_info)${SERNAME}已经停止..."		???????????????
		????????????fi
			????????;;
		???????esac??
?????????;;
????????"device")
????????????case?${OPER}?in
???????????		"stat")
		???????????if?[?-f?${DEVICEAPPPATH}/${SERNAME}.pid?];then
		??????????????echo?"$(log_info)${SERNAME}?应用已启动,进程ID为$(cat?${DEVICEAPPPATH}/${SERNAME}.pid)"
		???????????else
		??????????????echo?"$(log_info)${SERNAME}?应用未启动!"?
		???????????fi
		???????????;;
		???????????"start")
		???????????	if?[?-f?${DEVICEAPPPATH}/${SERNAME}.pid?];then
			??????????????echo?"$(log_info)${SERNAME}?应用已启动,进程ID为$(cat?${DEVICEAPPPATH}/${SERNAME}.pid)"
			??????????else
			??????????????echo?"$(log_info)${SERNAME}?应用准备启动...?"
			??????????????cd?${DEVICEAPPPATH}	
		????????????????nohup?java?-Xms1024m?-Xmx2048m?-jar?-Dspring.config.location=./application-1.properties?${DEVICEAPPPATH}/${DEVICEAPPNAME}?&>/dev/null?&
		????????????????sleep?10
			??????????????#?获取应用进程ID写入pid文件
			??????????????getPid?${SERNAME}
			??????????????[?!?-f?${DEVICEAPPPATH}/${SERNAME}.pid?]&&?echo?"$(log_error)${SERNAME}启动失败!"&&exit?12||?echo?"$(log_info)${SERNAME}启动成功,进程ID为${SERPID}."			?????????
			??????????fi?
			?????????;;
			?????????"restart")
			?????????	if?[?-f?${DEVICEAPPPATH}/${SERNAME}.pid?];then
		????????????????echo?"$(log_info)${SERNAME}准备停止应用..."
		????????????????kill?$(cat?${DEVICEAPPPATH}/${SERNAME}.pid)
		????????????????sleep?3
		??????????????[?$??-eq?0?]&&?rm?-f?${DEVICEAPPPATH}/${SERNAME}.pid?&&echo?"$(log_info)${SERNAME}已停止。"||{?echo?"$(log_error)${SERNAME}停止失败。"&&exit?13;}
		????????????????echo?"$(log_info)${SERNAME}准备启动应用..."
		????????????????cd?${DEVICEAPPPATH}	
		????????????????nohup?java?-Xms1024m?-Xmx2048m?-jar?-Dspring.config.location=./application-1.properties?${DEVICEAPPPATH}/${DEVICEAPPNAME}?&>/dev/null?&
		????????????????sleep?10
		????????????????getPid?${SERNAME}
		??????????????[?!?-f?${DEVICEAPPPATH}/${SERNAME}.pid?]&&{?echo?"$(log_error)${SERNAME}启动失败!"&&exit?12;}||?echo?"$(log_info)${SERNAME}启动成功,进程ID为${SERPID}."
		????????????else
		???????????????echo?"$(log_info)${SERNAME}准备启动应用..."
		???????????????cd?${DEVICEAPPPATH}	
		???????????????nohup?java?-Xms1024m?-Xmx2048m?-jar?-Dspring.config.location=./application-1.properties?${DEVICEAPPPATH}/${DEVICEAPPNAME}?&>/dev/null?&
		???????????????sleep?10
		???????????????getPid?${SERNAME}
		???????????????[?!?-f?${DEVICEAPPPATH}/${SERNAME}.pid?]&&{?echo?"$(log_error)${SERNAME}启动失败!"&&exit?12;}||?echo?"$(log_info)${SERNAME}启动成功,进程ID为${SERPID}."
		????????????fi
			????????;;
			????????"stop")
			?????????	if?[?-f?${DEVICEAPPPATH}/${SERNAME}.pid?];then
		????????????????echo?"$(log_info)${SERNAME}准备停止应用..."
		????????????????kill?$(cat?${DEVICEAPPPATH}/${SERNAME}.pid)
		????????????????sleep?3
		??????????????	[?$??-eq?0?]&&?rm?-f?${DEVICEAPPPATH}/${SERNAME}.pid?&&echo?"$(log_info)${SERNAME}已停止。"||{?echo?"$(log_error)${SERNAME}停止失败。"&&exit?13;}		???????????????
		????????????else
		???????????????echo?"$(log_info)${SERNAME}已经停止..."		???????????????
		????????????fi
			????????;;
		???????esac?
?????????;;
????????"eureka")
????????????echo?""?
?????????;;
????????*)
???????????echo?"$(log_error)输入错误,请重新输入!"
???????????defaults
???????????exit?12
????esac
}

function?main(){
????case?$OPER?in
????????"stat")
???????????checkInput
???????????getPid?${SERNAME}
???????????operation?${SERNAME}
?????????;;
????????"start")
???????????checkInput
???????????getPid?${SERNAME}
???????????operation?${SERNAME}??
?????????;;
????????"stop")
????????????checkInput
	??????????getPid?${SERNAME}
	??????????operation?${SERNAME}?
?????????;;
????????"restart")
????????????checkInput
	??????????getPid?${SERNAME}
	??????????operation?${SERNAME}
?????????;;
????????*)
???????????echo?"$(log_error)输入错误,请重新输入!"
???????????defaults
???????????exit?12
????esac
}
main|tee?-a?${LOGNAME}

相关TAG标签
上一篇:kettle的“调取DB存储过程”插件(可以调取存储过程,函数)-qq5a7ff23509f79的博客-51CTO博客
下一篇:网络连接和层次模型及ip分类与配置-CCAG-51CTO博客
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站