专栏首页技术从心Linux下部署Spring Boot jar

Linux下部署Spring Boot jar

来源:https://mrbird.cc/Linux%20Spring-Boot-jar.html

部署Spring Boot项目可以使用Maven命令mvn:clean package将项目打包成只执行的jar文件,然后使用命令java -jar XX.jar来执行。但这样做无法将shell命令行释放,关闭terminal后项目也随之关闭了。这里介绍在Linux系统中后台运行Spring Boot jar文件的方法。

实现这个功能主要依赖于Linux的nohup命令。nohup命令可以将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端。

nohup语法:

nohup 命令
用途:不挂断地运行命令。
语法:nohup Command [ Arg … ][ & ]

所以只需要在启动命令前加上nohup命令,末尾加上&即可:nohup java -jar XX.jar &。

为了方便,我们可以编写启动脚本start.sh:

nohup java -jar XX.jar &

关停脚本stop.sh:

PID=`ps -ef | grep sms-2.0.jar | grep -v grep | awk '{print $2}'`
if [ -z "$PID" ]
then
    echo Application is already stopped
else
    echo kill $PID
    kill -9 $PID
fi

重启脚本run.sh:

echo stop application
source stop.sh
echo start application
source start.sh

在编写shell脚本的过程中遇到了两个问题:

1.执行.sh文件提示权限不足:

解决办法:执行命令chmod u+x XX.sh赋予当前用于可执行的权限即可。

2.提示/bin/bash^M: bad interpreter: 没有那个文件或目录。

问题出现的原因是shell脚本是在windows中编写的然后上传到Linux中的,出现了兼容性问题。解决办法:执行vim XX.sh打开shell文件,然后切换到命令模式,执行:set fileformat=unix后保存退出即可。

使用了nohup命令后,会在jar文件目录下生成一个nohup.out文件,可通过其观察当前项目的运行情况:

$ ll
总用量 76612
drwxrwxr-x 2 zjrun zjrun     4096 2月   8 08:49 log
-rw------- 1 zjrun zjrun 58695723 2月   8 10:15 nohup.out
-rwxrw-r-- 1 zjrun zjrun       88 2月   7 15:17 run.sh
-rw-rw-r-- 1 zjrun zjrun 19730199 2月   8 10:11 sms-1.0.jar
-rwxrw-r-- 1 zjrun zjrun       60 2月   7 15:22 start.sh
-rwxrw-r-- 1 zjrun zjrun      184 2月   7 15:19 stop.sh

$ tail -10f nohup.out 
10:14:31.309 logback [main] INFO  o.s.j.e.a.AnnotationMBeanExporter - Registering beans for JMX exposure on startup
10:14:31.478 logback [main] INFO  o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8963"]
10:14:31.498 logback [main] INFO  o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8963"]
10:14:31.506 logback [main] INFO  o.a.tomcat.util.net.NioSelectorPool - Using a shared selector for servlet write/read
10:14:31.634 logback [main] INFO  o.s.b.c.e.t.TomcatEmbeddedServletContainer - Tomcat started on port(s): 8963 (http)
10:14:31.644 logback [main] INFO  com.xingyi.sms.SmsApplication - Started SmsApplication in 7.213 seconds (JVM running for 8.03)
complete!
10:15:26.978 logback [http-nio-8963-exec-1] INFO  o.a.c.c.C.[.[localhost].[/mobilePre] - Initializing Spring FrameworkServlet 'dispatcherServlet'
10:15:26.979 logback [http-nio-8963-exec-1] INFO  o.s.web.servlet.DispatcherServlet - FrameworkServlet 'dispatcherServlet': initialization started
10:15:27.004 logback [http-nio-8963-exec-1] INFO  o.s.web.servlet.DispatcherServlet - FrameworkServlet 'dispatcherServlet'

每天

进步一点点

本文分享自微信公众号 - 技术从心(gh_d845efe513db),作者:LYJ

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 深入Java虚拟机|类加载机制

    类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。它们开始的顺序如下图所示:

    技术从心
  • 记一次项目上线的BUG

    今天在写项目的时候突然项目经理跟我说之前项目的一个功能请求出现了异常,当时虎躯一震,上线的项目出问题了?什么问题?当时慌的一批。

    技术从心
  • Java设计模式|原型模式

    原型模式属于对象的创建模式,通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象,这就是原型模式的用意。

    技术从心
  • 手机直播/PC直播/摄像头直播等流媒体直播系统中如何进行推流优化?

    流媒体直播系统的推流是视频播放中很重要的一个步骤,推流跟播放其实是逆向的,具体流程就不多说了。

    EasyNVR
  • 直播推流失败,手把手教你问题定位

    经常会收到客户咨询,直播推流失败是什么原因导致。从云直播使用步骤上来讲,直播推流作为第一步,如果推流失败,后续的转码、录制、播放等都无从实现。因此推流可以说是非...

    clairehou
  • 深入理解动态规划算法 - 凑硬币

    动态规划(Dynamic Programming)算法是计算机科学科学领域中最重要也是最常用的一个算法,巧妙的利用它可以解决很多复杂的问题,而且该算法也频繁的出...

    算法与编程之美
  • 求十个数中最大值和最小值-C++

    WindCoder
  • 【快报】“中国造”手术机器人有望面世 | 特斯拉中国官网删除“自动驾驶“”无人驾驶”字眼

    1 特斯拉中国官网删除“自动驾驶” 、“无人驾驶”字眼 ? 特斯拉中国官网已经看不到“Autopile” 自特斯拉汽车在中国发生首次车祸,车主投诉特斯拉公司夸大...

    新智元
  • Java HelloWorld 學習

    将常量压入栈的指令 aconst_null 将null对象引用压入栈 iconst_m1 将int类型常量-1压入栈 iconst_0 将int类型常量0...

    一个会写诗的程序员
  • 2016.05 第三周 群问题分享

    HTML+CSS 一个div里面有个img标签,div的高度由img撑开;img的兄弟级有个div要使内层div的高度等于外层div的高度,除了用JS实现,还能...

    HTML5学堂

扫码关注云+社区

领取腾讯云代金券