Linux將Spring Boot項(xiàng)目的Jar包注冊(cè)為開機(jī)自啟動(dòng)系統(tǒng)服務(wù)的操作方法
有時(shí)候我們需要將Spring Boot打包出來(lái)jar文件當(dāng)做系統(tǒng)服務(wù)注冊(cè)到系統(tǒng)中,本文教你如何操作
目錄結(jié)構(gòu)
以下是目錄結(jié)構(gòu),jar文件是從maven package打包出來(lái)的,config/application.yml是原先在項(xiàng)目的resources文件夾里,外置出來(lái)方便適配開發(fā)環(huán)境和正式環(huán)境。static目錄用來(lái)存放靜態(tài)資源,比如vue前端或者上傳目錄。所有的.sh文件都是本文后續(xù)要寫的。
/data /start.sh // 啟動(dòng)腳本 /stop.sh // 關(guān)閉腳本 /serviceStart.sh // 服務(wù)啟動(dòng)腳本 /serviceStop.sh // 服務(wù)關(guān)閉腳本 /YumeisoftDemo-0.0.1-SNAPSHOT.jar // 打包的項(xiàng)目Jar包 /config // 配置文件目錄 /application.yml // 項(xiàng)目配置文件 /jdk // jdk目錄 /static // 靜態(tài)資源目錄
編寫Service調(diào)用的腳本
配置腳本/data/config.sh,如果改包名,直接改這個(gè)文件即可
#!/bin/sh # 配置JAR文件名,把它改成你的Jar文件名 SPRING_JARFILE=YumeisoftDemo-0.0.1-SNAPSHOT.jar # 日志文件位置 LOG_FILE=system.log # 獲取.sh所在路徑 INSTALL_DIR=$(cd $(dirname $0);pwd) # 配置JDK路徑 JAVA_HOME=$INSTALL_DIR/jdk # 設(shè)定PATH,不設(shè)會(huì)無(wú)法使用java命令 PATH=$JAVA_HOME/bin:$PATH
手動(dòng)啟動(dòng)服務(wù)腳本/data/start.sh,其中system.log是日志文件名
#!/bin/sh # 讀取config.sh定義的內(nèi)容 source $INSTALL_DIR/config.sh # 后臺(tái)方式運(yùn)行jar包 nohup java -jar $INSTALL_DIR/$SPRING_JARFILE > $INSTALL_DIR/$LOG_FILE 2>&1 & # 顯示日志 tail -f $INSTALL_DIR/$LOG_FILE
手動(dòng)關(guān)閉服務(wù)腳本/data/stop.sh
#!/bin/sh
# 讀取config.sh定義的內(nèi)容
source $INSTALL_DIR/config.sh
# 獲取當(dāng)前項(xiàng)目運(yùn)行的進(jìn)程ID
PID=$(ps -ef | grep "java -jar $INSTALL_DIR/$SPRING_JARFILE" | grep -v grep | awk '{print $2}')
if [ -z "$PID" ]; then
# 如果沒(méi)找到則提示未運(yùn)行
echo "Spring Boot應(yīng)用未在運(yùn)行中."
else
# 如果找到了,正常終止進(jìn)程
kill $PID
# 顯示日志
tail -f $INSTALL_DIR/$LOG_FILE
echo "Spring Boot應(yīng)用已停止."
fi服務(wù)啟動(dòng)腳本/data/serviceStart.sh
#!/bin/sh # 讀取config.sh定義的內(nèi)容 source $INSTALL_DIR/config.sh # 后臺(tái)方式運(yùn)行jar包 nohup java -jar $INSTALL_DIR/$SPRING_JARFILE > $INSTALL_DIR/$LOG_FILE 2>&1 &
服務(wù)關(guān)閉腳本/data/serviceStop.sh
#!/bin/sh
# 讀取config.sh定義的內(nèi)容
source $INSTALL_DIR/config.sh
# 獲取當(dāng)前項(xiàng)目運(yùn)行的進(jìn)程ID
PID=$(ps -ef | grep "java -jar $INSTALL_DIR/$SPRING_JARFILE" | grep -v grep | awk '{print $2}')
if [ -z "$PID" ]; then
# 如果沒(méi)找到則提示未運(yùn)行
echo "Spring Boot應(yīng)用未在運(yùn)行中."
else
# 如果找到了,正常終止進(jìn)程
kill $PID
echo "Spring Boot應(yīng)用已停止."
fi賦權(quán)
不賦權(quán)是無(wú)法運(yùn)行的,所以我們要執(zhí)行以下命令:
chmod a+x /data/*.sh
創(chuàng)建一個(gè)Service
接下來(lái)我們把這個(gè)項(xiàng)目注冊(cè)為系統(tǒng)服務(wù),myService改成你要改成的服務(wù)名:
vim /etc/systemd/system/myService.service
因?yàn)橹皼](méi)有這個(gè)系統(tǒng)服務(wù),會(huì)創(chuàng)建一個(gè)新文件,這個(gè)文件就是系統(tǒng)服務(wù)的啟停配置文件,按一下a進(jìn)入編輯模式,把下面的代碼粘貼上去,然后按下Esc、冒號(hào)、輸入wq、回車。
[Unit] Description=MyService After=network.target [Service] Type=forking ExecStart=/data/serviceStart.sh ExecStop=/data/serviceStop.sh PrivateTmp=true [Install] WantedBy=multi-user.target
這里面的ExecStart和ExecStop都是服務(wù)啟動(dòng)和服務(wù)停止腳本的絕對(duì)路徑。Description是指服務(wù)的描述信息,這里可以填中文,其他的不要改動(dòng)。
啟用并使用Service
做完以上步驟你就可以在服務(wù)器里執(zhí)行systemctl enable myService命令,即可啟用myService服務(wù),然后使用systemctl start myService即可啟動(dòng)服務(wù),systemctl stop myService即可關(guān)停服務(wù),system status myService命令可以看到服務(wù)的狀態(tài)。
到此這篇關(guān)于如何在Linux將Spring Boot項(xiàng)目的Jar包注冊(cè)為開機(jī)自啟動(dòng)系統(tǒng)服務(wù)的文章就介紹到這了,更多相關(guān)Spring Boot Jar包開機(jī)自啟動(dòng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springSecurity之AuthenticationProvider用法解析
這篇文章主要介紹了springSecurity之AuthenticationProvider用法解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
spring boot與ktor整合的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于spring boot與ktor整合的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Java深入講解instanceof關(guān)鍵字的使用
instanceof 是 Java 的一個(gè)二元操作符,類似于 ==,>,< 等操作符。instanceof 是 Java 的保留關(guān)鍵字。它的作用是測(cè)試它左邊的對(duì)象是否是它右邊的類的實(shí)例,返回 boolean 的數(shù)據(jù)類型2022-05-05
Springboot整合hutool驗(yàn)證碼的實(shí)例代碼
在 Spring Boot 中,你可以將 Hutool 生成驗(yàn)證碼的功能集成到 RESTful API 接口中,這篇文章主要介紹了Springboot整合hutool驗(yàn)證碼,需要的朋友可以參考下2024-08-08
Java中stream.map和stream.forEach的區(qū)別
本文主要介紹了Java中stream.map和stream.forEach的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
Spring Boot與Redisson實(shí)時(shí)排行榜功能
排行榜功能是常見且重要的需求之一,本文主要介紹了Spring Boot與Redisson實(shí)時(shí)排行榜功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05

