配合springboot的快速运维脚本
简介
此篇博客介绍的是使用简易sh脚本来对Spring boot项目的jar包进行简单运维管理。
因何而起
在松果生活项目里,我兼任了运维的工作。因为项目后端使用的是Spring boot框架,所以我在运维上的工作主要是为服务器更新后端导出的jar包。
Spring boot项目自带Tomcat,因此导出项目jar包后只需要将其部署到Linux服务器上,进入对应目录,并输入java -jar xxx.jar即可启动服务。
但是使用这种方式属于前台运行,退出控制台后就会断开服务。在使用sh脚本前,我必须一直开着电脑并运行XShell来为客户端提供服务。这显然是不方便的。
因此我学习了使用sh脚本在后台运行项目的方法。
正题
正常运行spring boot的jar包是在命令行输入。
java -jar xxx.jar
而把服务放到后端运行就是在指令前加上nohup命令。
nohup java -jar xxx.jar
此时原本的命令行输出会被重定向到同级的nohup.out文件下。
如果想关闭服务,就要找到服务的PID,然后通过kill指令将其关闭。
为了便于管理,我们可以编写简易的sh脚本将这些指令封装起来。
start.sh
start.sh封装了启动服务的指令,其内容如下:
nohup java -jar xxx.jar &
将其部署到和jar包同级的目录下,命令行进入目录并输入./start.sh即可运行该脚本。
运行时,也能会遇到提示权限不足的情况,此时输入chmod 777 start.sh给文件赋予权限即可。
stop.sh
stop.sh封装了关闭服务的指令,其内容如下:
PID=$(ps -ef | grep xxxjar | grep -v grep | awk '{ print $2 }')
if [ -z "$PID" ]
then
echo Application is already stopped
else
echo kill $PID
kill $PID
fi
主要逻辑是获取jar包的pid,然后将其关闭。
同样使用./stop.sh来运行,chmod 777 stop.sh赋予权限。
run.sh
有了以上两个文件,启动和关闭服务只要输入2(4)行代码即可。
而更新服务时,我们需要先关闭服务,部署新jar包,再启动新的服务。因此我们还可以写一个脚本专门用于更新服务用。可见以下代码:
echo stop application
source stop.sh
echo start application
source start.sh
有了此脚本,我们部署完新的jar包后只要赋予权限并输入./run.sh即可运行新服务。
技术难点
这个技术几乎没有难点,只需要简单的Linux知识就能理解了。
但是在使用时可以会遇到两个问题,将在下面进行描述
问题与相关解决
1.脚本权限不足
此问题在前面有进行描述,遇到时使用chmod 777 xxx.sh给脚本赋予权限即可
2.编码问题
如果我们的脚本是在Windows环境下写的,部署到Linux服务器上直接运行会报错编码错误。这是因为Windows下的sh是dos编码,而Linux用的是unix编码。
对于此问题可以使用Linux下的dos2unix插件来对目标文件进行转换。转换后的脚本可以正常运行。并且下载到Windows环境后编码还是unix。
总结
这里介绍的是一个粒度很小的运维技巧,可以帮助我们对spring boot项目进行简单运维管理。同时我觉得,此技术可以作为Linux学习的一个切入点,通过这些文件来学习更多快捷操作的方法。