概述
先说一下这个脚本的由来吧,之前刚开始接触spring-cloud项目,跌跌撞撞摸索了很多,也学到很多,从刚开始的自己用maven打war包放在服务器上运行,然后一个个的使用命令 java -jar fms-cloud.war &
来启动,说实话,费时费力,每次一点小改动就重新maven打包再用命令启动,所以需要什么来改变了。
然后我就寻找各种途径能减轻我的打包工作,之前也尝试过使用在windows上编写bat脚本 进行 maven打包,然后连接服务器,将war包上传到服务器,最后执行linux命令启动。其实这个操作也是可以的,但是感觉还是不得劲,因为我们这个系统的模块真的多,足足有18个,每次启动的服务还不一样,编写的bat脚本就太多了。
之后就直接去研究Jenkins,刚开始确实有点复杂,然后各种设置什么的,每个模块就要建立一个job,但是后来用着还是挺香的,之前打包都是我一个人来,现在是自己提交了代码之后用Jenkins构建一下就可以了,方便你我他。
也是在这个时期,应行内技术人员要求,需要一个shell脚本,用于统一启动和停止服务的操作,所有事情都是两手准备,如果Jenkins出了问题,那么就用shell脚本来操作,下面就是我疯狂百度了几天,最后自己写的一个操作脚本,希望能给你们带来帮助,废话不多说,看脚本,其中一些知识我也写在注释里面了
#! /bin/bash
# 上面是指此脚本使用/bin/bash来解释执行
#这里一个start方法 下面在启动的时候会根据启动参数进行调用
start(){
# echo 为输出指令 可以将变量paths打印出来
echo ${paths}
# 获取参数赋给变量path 执行脚本的-p参数赋值然后获取到的
path="${paths}"
# 这里是判断 path 是否长度为0 如果是 给一个提示
if [ -z $path ]; then
echo "执行start命令请添加-p路径参数"
return
fi
# 定义变量 A B
A="eureka"
B="config"
# 使用 local 定以一个局部变量 okCount
local okCount=0
# 定以一个JARS变量 此变量的值为 通过命令 find 查找出来的值
JARS="$(find $path -name *0.0.1-SNAPSHOT.jar)"
# 判断查找出来的数量是否大于0
if [ ${#JARS} -gt 0 ]; then
echo "判断是否有eureka的jar包"
# 这里之所有要判断 因为这个项目需要先启动 eureka服务与config服务
# 然后这里判断使用了 *$A* 通配符
if [[ $JARS == *$A* ]]; then
echo "存在eureka服务,准备启动"
nohup java -jar "$(find $path -name fms-cloud-eureka-0.0.1-SNAPSHOT.jar)" &
echo "启动eureka服务完成"
okCount=$(($okCount+1))
echo "准备启动config服务"
sleep 10s
nohup java -jar "$(find $path -name fms-cloud-config-0.0.1-SNAPSHOT.jar)" &
echo "启动config服务完成"
okCount=$(($okCount+1))
sleep 10s
fi
echo "准备启动应用类服务"
for jar in $JARS
do
if [[ $jar == *$A* ]]; then
echo "eureka服务已启动,这里不用启动"
elif [[ $jar == *$B* ]]; then
echo "config服务已启动,这里不用启动"
else
echo "准备启动服务,服务路径为$jar"
nohup java -jar $jar &
okCount=$(($okCount+1))
fi
done
else
echo "没有搜索到要启动的jar包,检查一下目录或者脚本"
fi
echo ".............本次共启动:$okCount个服务..........."
}
#停止当前服务器的所有服务的一个stop方法
stop(){
local okCount=0
# 这里依然是定以PID变量 并将通过命令执行后的结果赋值给它
# 这个命令的作用为 列出所有进程中含有0.0.1-SNAPSHOT.jar的PID
PID="$(ps -ef | grep 0.0.1-SNAPSHOT.jar | grep -v grep | awk '{print $2}')"
# 判断PID是否大于0
if [ ${#PID} -gt 0 ]; then
echo "准备停止相应的资金系统服务"
# 通过for循环 PID 变量
for id in $PID
do
echo "停止成功pid: $id"
kill -9 $id
okCount=$(($okCount+1))
done
else
echo "没有运行的资金服务"
fi
echo ".............本次共停止:$okCount个服务..........."
}
# 下面这段脚本的作用是刚开始启动的时候获取第一参数方便使用
# 比如启动命令为: ./fms-cloud.sh start
#case "$1" in
#
start)
#
start
#
;;
#
stop)
#
stop
#
;;
#
*)
#
echo "第一个参数请输入: start|stop 该脚本只支持启动和关闭服务"
#
exit
#
;;
#esac
# 后来为了能更加方便 因为每个版本所有的jar包都放在不同的路径下
# 能将路径也通过参数控制就非常方便了(就是过场多)
# 然后就百度到了这个getopts 是获取执行脚本的参数 -a -p
while getopts "a:p:" opt; do
case $opt in
p)
# $OPTARG 通过这个就可以获得-p 后面的参数值
paths=$OPTARG
;;
a)
option=$OPTARG
if [ "$option" = "stop" ]; then
stop
elif [ "$option" = "start" ]; then
start
else
echo "-a 参数后面请输入:start|stop 该脚本只支持启动和关闭服务"
fi
;;
?)
echo "执行该脚本请添加执行参数,执行参数-a:start|stop ,路径参数-p:/app/fms"
echo "执行例子:./killAndRestar.sh -p /app/fms -a start"
;;
esac
done
上面就是最终的shell脚本,每个系统的启动要求都不一样,所以肯定脚本也有所不同,我这个就给大家参考参考,希望能帮到在开发路上负重前行的你们!
最后
以上就是高挑柜子为你收集整理的shell脚本实战-启动停止服务的全部内容,希望文章能够帮你解决shell脚本实战-启动停止服务所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复