最近在linux上发布了一个SpringBoot项目,研究了一下jar包在Linux上的集中启动方式,特在此分享一下。

这里默认要启动的jar包为demo-0.0.1-SNAPSHOT.jar

第一种:当前窗口方式启动

把jar包放到一个位置,然后执行 java -jar demo-0.0.1-SNAPSHOT.jar

这种方式,当当前窗口关闭的时候,服务也就关闭了。直接Ctrl+C也可以将当前服务关闭。

第二种:后台方式启动

nohup java -jar demo-0.0.1-SNAPSHOT.jar >> demo.log 2>&1 &

这种方式是将 demo-0.0.1-SNAPSHOT.jar 包后台启动,并且将日志输入demo.log中去了

第三种:脚本启动&&服务器启动自动启动

第三种启动方式中,有单纯的脚本启动,还加入了服务器启动jar包自动启动服务

查看jdk安装目录 :

执行 java -verbose 看最后两行

3.1 创建启动脚本 demo-start.sh

#!/bin/bash
export JAVA_HOME=/usr/java/jdk-8u261-linux-x64 #对应的 jdk 位置 可以使用 which java 查看具体位置
export PATH=$JAVA_HOME/bin:$PATH
nohup java -jar /root/tianqq/demo-0.0.1-SNAPSHOT.jar >> demo.log 2>&1 &
echo $! > /root/tianqq/demo-start.pid #将上一次启动的pid 写入到指定文件

3.2 创建停止脚本 demo-stop.sh

#!/bin/sh
PID=$(cat /root/tianqq/demo-start.pid)
kill -9 $PID

此时是已经创建了脚本启动,

3.3 服务器启动自动启动

在目录/usr/lib/systemd/system 下创建demo.service

[Unit]
Description=run demo service
After=network.target
[Service] Type=forking
# /bin/bash 下面这个一定要加,之前没有加的时候,报了好久的203错误
ExecStart= /bin/bash /root/tianqq/demo-start.sh
ExecStop=/root/tianqq/demo-stop.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target

然后就是下面的一通操作

systemctl start demo #启动 facepay 服务
systemctl stop demo #停止 facepay 服务
systemctl status demo #查看 facepay 服务当前的运行状态 systemctl enable demo #开机启动 facepay 服务
systemctl disable demo #取消开机启动 facepay 服务
systemctl list-unit-files; #查看当前服务(是否开机启动等)状态

3.4 验证

reboot # 重启服务器

重启服务器试一下,验证下jar服务是否重启了

这次本来是想要做一个jar包的自启动服务的,中间遇到了一些困难,特此分享下我目前掌握的三种jar包启动的方式。

欢迎转载,转载请注明原文出处

个人公众号 :hellotqq,坚持原创输出,坚持分享学习感悟,欢迎关注与您共同成长!

说一下三种jar包在Linux的启动方式的更多相关文章

  1. 将java打jar包成linux后台服务service

    将java打jar包成linux后台服务service 第一步:将java程序打成jar包 build.gradle配置文件中加spring-boot-gradle-plugin插件,具体配置如下(配 ...

  2. 常见的装包的三种宝,包 bao-devel bao-utils bao-agent ,包 开发包 工具包 客户端

    常见的装包的三种宝,包  bao-devel    bao-utils   bao-agent  ,包    开发包   工具包  客户端

  3. 将一个jar包放到linux下定时执行

    将一个jar包放到linux下定时执行 1.在dbtodb文件夹下新建一个dbtodb.sh,脚本内容为: #!/bin/bash cd /usr/dbtodb/ java -jar dbtodb.j ...

  4. 在IDEA中用三个jar包链接MongoDB数据库——实现增删改查

    安装Robo 3T连接MongoDB数据库教程:https://blog.csdn.net/baidu_39298625/article/details/98845789 使用Robo 3T操作Mon ...

  5. 在.NET Core中三种实现“可插拔”AOP编程方式(附源码)

    一看标题肯定会联想到使用动态编织的方式实现AOP编程,不过这不是作者本文讨论的重点. 本文讨论另外三种在netcore中可实现的方式,Filter(过滤器,严格意义上它算是AOP方式),Dynamic ...

  6. build path libraries java基础--Jar包添加到build path方式说明--01

    摘自: http://blog.csdn.net/haolongabc/article/details/7007701 java基础--Jar包添加到build path方式说明--01 前言:这段短 ...

  7. spring boot开发,jar包一个一个来启动太麻烦了,写一个bat文件一键启动

    spring boot开发,jar包一个一个来启动太麻烦了,写一个bat文件一键启动 @echo offcd D:\workProject\bushustart cmd /c "title ...

  8. 关于spring boot打出的jar包在Linux中运行

    众所周知, spring boot打出的jar包可以通过 "java -jar xxx.jar"的方式来运行 但是在Linux中, 通过这个命令运行的话会占用该窗口, 当我们 Ct ...

  9. springboot项目打包成jar包在Linux服务器默认80端口运行

    springboot项目端口设置 在application.properties文件 server.port=80 在application.yml文件 server: port: 80 然后在ide ...

随机推荐

  1. IDEA 调试起来太费劲?你需要了解这几招!

    各位好啊,我是会编程的蜗牛,我们在使用IDEA开发java项目时,经常需要用到IDEA的调试功能,不过平时我们用的调试方法可能过于简单了,其实IDEA还给我们提供了非常强大的调试功能,下面让我来看一看 ...

  2. 华为路由器RIP路由协议配置命令

    RIP路由协议配置 rip 创建开启协议进程 network + ip 对指定网段接口使能RIP功能IP地址是与路由器直连的网段 debugging rip 1 查看RIP定期更新情况 termina ...

  3. 0025:2011年NOIp普及组真题——瑞士轮题解

    题目链接:https://www.luogu.com.cn/problem/P1309 如果是新手可能马上会想到sort排序,每比一次就排一次,但是这样的时间复杂度有点高,只有60分: 这是因为每次比 ...

  4. 中国制霸生成器「GitHub 热点速览 v.22.42」

    火遍推特的中国制霸生成器本周一开源就占据了两天的 GitHub Trending 榜,不知道你的足迹遍布了多少个省份呢?同样记录痕迹的 kanal 用了内存读写方式解决了 Rust 的消息处理问题,P ...

  5. NLP之TextLSTM(预测单词下一个字母)

    LSTM 目录 LSTM 1.理论 1.1 LSTM与RNN 1.1.1 RNN的缺点 1.1.2 LSTM 1.2 LSTM基本结构 2.实验 2.1 实验步骤 2.2 算法模型 1.理论 1.1 ...

  6. 2.Python封装练习及私有属性

    面向对象三大特性 封装:根据职责将属性和方法封装到一个抽象的类中 继承:实现代码的重用,相同代码不需要重复的编写 1.单继承 2.多继承 多态:不同的对象调用相同的方法,产生不同的执行结果,增加代码的 ...

  7. Codeforces Round #828 (Div. 3) A-F

    比赛链接 A 题解 知识点:贪心,模拟. 遇到没用过的数字就给个字母,遇到用过的数字就对照字母是否一致. 时间复杂度 \(O(n)\) 空间复杂度 \(O(n)\) 代码 #include <b ...

  8. Blog1:nchu-software-oop-2022-1~3

    (1) 前言 针对在完成三次作业过程中产生的问题进行总结与分析. 三次作业一共十五(9+3+3)道题目,其中前两次难度较为简单,第三次复杂程度飞跃式上涨. 其中,涉及到java语言中基本的输入输出语句 ...

  9. python字符串的一些操作

    # 1.变量的多次赋值 print('1.变量的多次赋值') name = '小明' # 没有意义的 name = '小刚' # 对前面创建的变量名称进行覆盖 # 删除原来的数据,写入新的数据 pri ...

  10. Day11.2:标签的使用

    标签的使用 当我们在嵌套语句中,例如当我们在for的嵌套循环语句中,想要终止或重新开始当前循环以外的循环的时候,单独仅靠break和continue和还不够,需要在我们想要作用的循环语句处加上一个标签 ...