配合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学习的一个切入点,通过这些文件来学习更多快捷操作的方法。

查看文献

springboot项目后台部署运行

posted @ 2020-06-25 20:07  萝卜熊  阅读(464)  评论(0编辑  收藏  举报