Shell重啟SpringBoot項(xiàng)目腳本的示例代碼(含服務(wù)守護(hù))
引用
在實(shí)際的軟件開發(fā)和部署過程中,經(jīng)常需要使用腳本來管理和控制服務(wù)的運(yùn)行。這些腳本可以方便地停止、啟動和監(jiān)控服務(wù),并在服務(wù)意外停止時(shí)自動重新啟動。在本文中,將展示一個(gè)使用 Bash 腳本來管理和守護(hù)運(yùn)行服務(wù)的示例。
步驟
首先,看一下示例腳本的結(jié)構(gòu)和關(guān)鍵部分。以下是示例腳本的完整代碼:
#!/bin/bash
JAR=your_service.jar
LOG_FILE=your_service_log_file.log
SERVER_HOST=localhost
SERVER_PORT=9998
# 停止服務(wù)
function stopServer(){
# 檢查進(jìn)程是否正在運(yùn)行
pid=$(ps -ef | grep "$JAR" | grep -v grep| awk '{print $2}')
if [ -n "$pid" ]; then
# 殺死進(jìn)程
kill -9 $pid
echo "服務(wù)已停止"
else
echo "服務(wù)未運(yùn)行"
fi
}
# 啟動服務(wù)
function startServer(){
# 啟動服務(wù)
nohup java -jar "$JAR" > "$LOG_FILE" 2>&1 &
echo "服務(wù)正在啟動……"
# 檢測服務(wù)是否啟動
sleep 10
while ! nc -z "$SERVER_HOST" "$SERVER_PORT"; do sleep 2; done
echo "服務(wù)啟動成功"
sleep 3
}
# 守護(hù)
function daemonFun(){
# 進(jìn)入循環(huán),定期檢查服務(wù)狀態(tài)
while true; do
# 檢查進(jìn)程是否正在運(yùn)行
pid=$(ps -ef | grep "$JAR" | grep -v grep| awk '{print $2}')
if [ -n "$pid" ]; then
# 服務(wù)正在運(yùn)行,等待一段時(shí)間后再次檢查
echo "服務(wù)正在運(yùn)行,等待一段時(shí)間后再次檢查"
sleep 60
else
# 服務(wù)已停止,啟動服務(wù)
startServer wait
echo "服務(wù)已重新啟動"
fi
done
}
stopServer wait
sleep 3
startServer wait
# 啟動守護(hù)
echo "啟動守護(hù)"
daemonFun &
以下逐步解釋腳本的不同部分。
首先,定義了一些變量,例如
JAR表示服務(wù)的 JAR 文件名,LOG_FILE表示日志文件名,SERVER_HOST和SERVER_PORT表示服務(wù)的主機(jī)和端口。接下來,定義了
stopServer函數(shù),用于停止服務(wù)。該函數(shù)會檢查服務(wù)進(jìn)程是否正在運(yùn)行,如果是,則使用進(jìn)程 ID 殺死該進(jìn)程。然后,定義了
startServer函數(shù),用于啟動服務(wù)。該函數(shù)會使用nohup命令在后臺運(yùn)行服務(wù),并將輸出重定向到日志文件。然后,它會等待一段時(shí)間,檢測服務(wù)是否成功啟動。接著,定義了
daemonFun函數(shù),用于守護(hù)運(yùn)行服務(wù)。該函數(shù)會進(jìn)入一個(gè)無限循環(huán),定期檢查服務(wù)的狀態(tài)。如果服務(wù)進(jìn)程不存在,則重新啟動服務(wù)。
在主程序中,首先調(diào)用
stopServer函數(shù)停止可能正在運(yùn)行的服務(wù),并等待一段時(shí)間。接下來,調(diào)用startServer函數(shù)啟動服務(wù),并再次等待一段時(shí)間。
最后,打印一條消息表示守護(hù)進(jìn)程正在啟動,并調(diào)用daemonFun函數(shù)在后臺運(yùn)行守護(hù)進(jìn)程。
總結(jié)
以上腳本可以方便地停止、啟動和守護(hù)運(yùn)行一個(gè)服務(wù)。你可以根據(jù)自己的實(shí)際需求修改腳本中的變量和函數(shù),以適應(yīng)特定的服務(wù)和環(huán)境。
以上就是Shell重啟SpringBoot項(xiàng)目腳本的示例代碼(含服務(wù)守護(hù))的詳細(xì)內(nèi)容,更多關(guān)于Shell重啟SpringBoot項(xiàng)目腳本的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Spring?AOP實(shí)現(xiàn)用戶登錄統(tǒng)一驗(yàn)證功能
這篇文章主要為大家詳細(xì)介紹了Spring?AOP如何實(shí)現(xiàn)用戶登錄統(tǒng)一驗(yàn)證功能,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)具有一定的借鑒價(jià)值,需要的可以參考一下2023-01-01
Java如何實(shí)現(xiàn)生成報(bào)表并將其導(dǎo)出為Excel
在許多企業(yè)應(yīng)用中,生成報(bào)表并將其導(dǎo)出到Excel表格是一項(xiàng)常見需求,這篇文章主要為大家介紹了Java如何實(shí)現(xiàn)生成報(bào)表并將其導(dǎo)出為Excel,需要的可以參考下2025-02-02
Java的幾個(gè)重要版本_動力節(jié)點(diǎn)Java學(xué)院整理
jdk8 將在2014年3月份發(fā)布,迄今為止,可能是最大更新的java版本,也是令人期待的一個(gè)版本,在Java中引入閉包概念對Java程序開發(fā)方法的影響甚至?xí)笥贘ava5中引入的泛型特征對編程方式帶來的影響2017-06-06
Java8深入學(xué)習(xí)系列(一)lambda表達(dá)式介紹
Java8最值得學(xué)習(xí)的特性就是Lambda表達(dá)式和Stream API,所以我們學(xué)習(xí)java8的第一課就是學(xué)習(xí)lambda表達(dá)式,下面這篇文章主要給大家介紹了關(guān)于Java8學(xué)習(xí)之lambda的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2017-08-08
編寫android撥打電話apk應(yīng)用實(shí)例代碼
這篇文章主要介紹了編寫android撥打電話apk應(yīng)用實(shí)例代碼,十分的實(shí)用,這里分享給大家,有需要的小伙伴可以參考下2015-04-04
聊聊@RequestBody和Json之間的關(guān)系
這篇文章主要介紹了@RequestBody和Json之間的關(guān)系,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06

