zoukankan      html  css  js  c++  java
  • 配合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项目后台部署运行

  • 相关阅读:
    Linux下解析域名命令-dig 命令使用详解
    重写、覆盖、重载、多态几个概念的区别分析
    介绍python中运算符优先级
    介绍Python中6个序列的内置类型
    Mysql(Mariadb)数据库主从复制
    winscp中使用sudo的方法
    git push跳过用户名和密码认证配置教程
    案例:通过shell脚本实现mysql数据备份与清理
    毕业季,我的Linux求职之路
    PHP和ajax详解
  • 原文地址:https://www.cnblogs.com/radishbear/p/13192783.html
Copyright © 2011-2022 走看看