SpringBoot項目Jar包使用systemctl運(yùn)行過程
1. 前言
SpringBoot項目打成jar包后,可以直接使用 java -jar xxx.jar 啟動。但是為了方便啟動和停止服務(wù),通常我們會寫兩個腳本,分別是啟動腳本 start.sh 和 停止腳本 shutdown.sh(這兩個腳本內(nèi)容我們下文會實(shí)現(xiàn));
再進(jìn)一步的做法是可以把我們的服務(wù)添加成系統(tǒng)服務(wù),使用systemctl 進(jìn)行管理,就像使用 systemctl status firewalld.service 一樣。
2. 創(chuàng)建SpringBoot項目并生成jar包
為了演示,先創(chuàng)建一個最普通的SpringBoot項目,在項目中使用 SLFJ + Logback記錄日志。
項目目錄結(jié)構(gòu)如下。
3. 使用 java -jar 命令在服務(wù)器上運(yùn)行
3.1 前臺運(yùn)行
前臺運(yùn)行,直接在jar包所在目錄執(zhí)行 java -jar xxx.jar 就可以了,如下所示:
3.2 后臺運(yùn)行(帶nohup.out日志)
通常我們是讓服務(wù)在后臺運(yùn)行,可以使用 nohup java -jar xxx.jar & 運(yùn)行jar包,如下:
這種直接使用 nohup java -jar xxx.jar & 運(yùn)行jar包會產(chǎn)生一個 nohup.out日志文件,在項目運(yùn)行過程中的日志都會追加到這個文件中,時間長了這個文件就會非常大,容易打滿磁盤,浪費(fèi)硬盤存儲空間。
3.3 后臺運(yùn)行(不帶nohup.out日志)
因?yàn)槲覀兊捻椖客ǔ<闪?SLFJ + Logback 進(jìn)行日志記錄,所以不需要生成這個文件,可以使用如下命令運(yùn)行jar包。
nohup java -jar xxx.jar >/dev/null 2>&1 &
4. 使用腳本實(shí)現(xiàn)啟動和停止jar包
每次使用 nohup java -jar xxx.jar >/dev/null 2>&1 & 運(yùn)行項目太麻煩,并且在關(guān)閉服務(wù)時,還要先找到這個服務(wù)的進(jìn)程號,然后才能關(guān)閉。
所以可以把啟動項目和關(guān)閉項目寫成腳本,每次只要執(zhí)行腳本就可以了。
4.1 啟動服務(wù)腳本
啟動服務(wù)腳本如下:
#!/bin/bash pid=$(pgrep -f 你的jar包名稱.jar) if [ -z $pid ];then nohup java -jar 你的jar包名稱.jar >/dev/null 2>&1 & else echo "你的jar包名稱.jar is already running [pid is $pid]" fi
比如我的啟動腳本如下:
啟動項目的過程如下:
4.2 停止服務(wù)腳本
停止服務(wù)腳本如下:
#!/bin/bash pid=$(pgrep -f 你的jar名字.jar) echo $pid if [ -z $pid ];then echo "你的jar名字.jar is not running" else kill -15 $pid fi
比如我的停止服務(wù)腳本如下:
執(zhí)行停止服務(wù)腳本過程如下:
5. 使用systemctl 命令管理jar包的啟動和停止
5.1 添加到系統(tǒng)服務(wù)
(1)寫一個服務(wù)腳本,名稱以 .service結(jié)尾 【我寫的是 demo-service.service,其內(nèi)容如下,你可以參照下面的寫法,修改成你自己的】
[Unit] Description=demo-service After=syslog.target network.target remote-fs.target nss-lookup.target [Service] Type=simple User=root Group=root WorkingDirectory=/opt/myJar/run_jar ExecStart=/opt/software/jdk/jdk8/jdk1.8.0_221/bin/java -jar /opt/myJar/run_jar/demo-project-1-1.0-SNAPSHOT.jar ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target
(2)把此文件,即demo-service.service 放到 /usr/lib/systemd/system/ 目錄下
(3)執(zhí)行 systemctl daemon-reload 命令
5.2 如何使用
使用請看圖中說明。
還可以把啟動服務(wù)添加到開機(jī)自啟,執(zhí)行如下命令,當(dāng)服務(wù)器重啟后就會自動啟動服務(wù)。
systemctl enable demo-service.service
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解SpringBoot 應(yīng)用如何提高服務(wù)吞吐量
這篇文章主要介紹了Spring Boot 應(yīng)用如何提高服務(wù)吞吐量,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07Java 使用Axis調(diào)用WebService的示例代碼
這篇文章主要介紹了Java 使用Axis調(diào)用WebService的示例代碼,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2020-09-09SpringCloud之微服務(wù)容錯的實(shí)現(xiàn)
這篇文章主要介紹了SpringCloud之微服務(wù)容錯的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05Spring Cloud 系列之負(fù)載均衡 Ribbon的示例代碼
Ribbon 是 Netflix 發(fā)布的負(fù)載均衡器,它有助于控制 HTTP 和 TCP 客戶端的行為。這篇文章主要介紹了Spring Cloud 系列之負(fù)載均衡 Ribbon的示例代碼,需要的朋友可以參考下2020-11-11Spring事務(wù)&Spring整合MyBatis的兩種方式
這篇文章主要介紹了Spring事務(wù)&Spring整合MyBatis的兩種方式,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-02-02java線程池實(shí)戰(zhàn)應(yīng)用步驟詳解
這篇文章主要介紹了java線程池實(shí)戰(zhàn)應(yīng)用小結(jié),包括線程池的創(chuàng)建方式,本文給大家分享兩種方式,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2025-04-04Java使用數(shù)組實(shí)現(xiàn)ArrayList的動態(tài)擴(kuò)容的方法
這篇文章主要介紹了Java使用數(shù)組實(shí)現(xiàn)ArrayList的動態(tài)擴(kuò)容的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06