Linux將Spring Boot項(xiàng)目的Jar包注冊為開機(jī)自啟動(dòng)系統(tǒng)服務(wù)的操作方法
有時(shí)候我們需要將Spring Boot打包出來jar文件當(dāng)做系統(tǒng)服務(wù)注冊到系統(tǒng)中,本文教你如何操作
目錄結(jié)構(gòu)
以下是目錄結(jié)構(gòu),jar文件是從maven package打包出來的,config/application.yml是原先在項(xiàng)目的resources文件夾里,外置出來方便適配開發(fā)環(huán)境和正式環(huán)境。static目錄用來存放靜態(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ì)無法使用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 # 如果沒找到則提示未運(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 # 如果沒找到則提示未運(yùn)行 echo "Spring Boot應(yīng)用未在運(yùn)行中." else # 如果找到了,正常終止進(jìn)程 kill $PID echo "Spring Boot應(yīng)用已停止." fi
賦權(quán)
不賦權(quán)是無法運(yùn)行的,所以我們要執(zhí)行以下命令:
chmod a+x /data/*.sh
創(chuàng)建一個(gè)Service
接下來我們把這個(gè)項(xiàng)目注冊為系統(tǒng)服務(wù),myService改成你要改成的服務(wù)名:
vim /etc/systemd/system/myService.service
因?yàn)橹皼]有這個(gè)系統(tǒng)服務(wù),會(huì)創(chuàng)建一個(gè)新文件,這個(gè)文件就是系統(tǒng)服務(wù)的啟停配置文件,按一下a進(jìn)入編輯模式,把下面的代碼粘貼上去,然后按下Esc、冒號、輸入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ù)停止腳本的絕對路徑。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包注冊為開機(jī)自啟動(dòng)系統(tǒng)服務(wù)的文章就介紹到這了,更多相關(guān)Spring Boot Jar包開機(jī)自啟動(dòng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot定時(shí)任務(wù)的實(shí)現(xiàn)詳解
這篇文章主要介紹了SpringBoot定時(shí)任務(wù)的實(shí)現(xiàn)詳解,定時(shí)任務(wù)是企業(yè)級開發(fā)中最常見的功能之一,如定時(shí)統(tǒng)計(jì)訂單數(shù)、數(shù)據(jù)庫備份、定時(shí)發(fā)送短信和郵件、定時(shí)統(tǒng)計(jì)博客訪客等,簡單的定時(shí)任務(wù)可以直接通過Spring中的@Scheduled注解來實(shí)現(xiàn),需要的朋友可以參考下2024-01-01MybatisPlus 插入或更新數(shù)據(jù)時(shí)自動(dòng)填充更新數(shù)據(jù)解決方案
本文主要介紹了MybatisPlus 插入或更新數(shù)據(jù)時(shí)自動(dòng)填充更新數(shù)據(jù)解決方案,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09一篇文章帶你了解java Object根類中關(guān)于toString,equals的方法
這篇文章主要介紹了Object類toString()和equals()方法使用解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-09-09解析Mybatis Porxy動(dòng)態(tài)代理和sql解析替換問題
這篇文章主要介紹了Mybatis Porxy動(dòng)態(tài)代理和sql解析替換,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04MultipartResolver實(shí)現(xiàn)文件上傳功能
這篇文章主要為大家詳細(xì)介紹了MultipartResolver實(shí)現(xiàn)文件上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06Java中JSONObject和Map<String,?Object>的轉(zhuǎn)換方法
平時(shí)對接口時(shí),經(jīng)常遇到j(luò)son字符串和map對象之間的交互,這篇文章主要給大家介紹了關(guān)于Java中JSONObject和Map<String,?Object>的轉(zhuǎn)換方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07