Shell重啟SpringBoot項目腳本的示例代碼(含服務(wù)守護)
引用
在實際的軟件開發(fā)和部署過程中,經(jīng)常需要使用腳本來管理和控制服務(wù)的運行。這些腳本可以方便地停止、啟動和監(jiān)控服務(wù),并在服務(wù)意外停止時自動重新啟動。在本文中,將展示一個使用 Bash 腳本來管理和守護運行服務(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(){ # 檢查進程是否正在運行 pid=$(ps -ef | grep "$JAR" | grep -v grep| awk '{print $2}') if [ -n "$pid" ]; then # 殺死進程 kill -9 $pid echo "服務(wù)已停止" else echo "服務(wù)未運行" 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 } # 守護 function daemonFun(){ # 進入循環(huán),定期檢查服務(wù)狀態(tài) while true; do # 檢查進程是否正在運行 pid=$(ps -ef | grep "$JAR" | grep -v grep| awk '{print $2}') if [ -n "$pid" ]; then # 服務(wù)正在運行,等待一段時間后再次檢查 echo "服務(wù)正在運行,等待一段時間后再次檢查" sleep 60 else # 服務(wù)已停止,啟動服務(wù) startServer wait echo "服務(wù)已重新啟動" fi done } stopServer wait sleep 3 startServer wait # 啟動守護 echo "啟動守護" daemonFun &
以下逐步解釋腳本的不同部分。
首先,定義了一些變量,例如
JAR
表示服務(wù)的 JAR 文件名,LOG_FILE
表示日志文件名,SERVER_HOST
和SERVER_PORT
表示服務(wù)的主機和端口。接下來,定義了
stopServer
函數(shù),用于停止服務(wù)。該函數(shù)會檢查服務(wù)進程是否正在運行,如果是,則使用進程 ID 殺死該進程。然后,定義了
startServer
函數(shù),用于啟動服務(wù)。該函數(shù)會使用nohup
命令在后臺運行服務(wù),并將輸出重定向到日志文件。然后,它會等待一段時間,檢測服務(wù)是否成功啟動。接著,定義了
daemonFun
函數(shù),用于守護運行服務(wù)。該函數(shù)會進入一個無限循環(huán),定期檢查服務(wù)的狀態(tài)。如果服務(wù)進程不存在,則重新啟動服務(wù)。
在主程序中,首先調(diào)用
stopServer
函數(shù)停止可能正在運行的服務(wù),并等待一段時間。接下來,調(diào)用startServer
函數(shù)啟動服務(wù),并再次等待一段時間。
最后,打印一條消息表示守護進程正在啟動,并調(diào)用daemonFun
函數(shù)在后臺運行守護進程。
總結(jié)
以上腳本可以方便地停止、啟動和守護運行一個服務(wù)。你可以根據(jù)自己的實際需求修改腳本中的變量和函數(shù),以適應(yīng)特定的服務(wù)和環(huán)境。
以上就是Shell重啟SpringBoot項目腳本的示例代碼(含服務(wù)守護)的詳細內(nèi)容,更多關(guān)于Shell重啟SpringBoot項目腳本的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot3.3中實現(xiàn)多端口監(jiān)聽的示例代碼
在SpringBoot應(yīng)用中實現(xiàn)多端口監(jiān)聽,可以讓一個應(yīng)用處理不同類型的HTTP請求或暴露多個服務(wù)接口,本文詳細講解了通過配置application.yml文件和編寫自定義配置類的方法,實現(xiàn)了對多個端口的監(jiān)聽,感興趣的可以了解一下2024-11-11解決MyBatis返回結(jié)果類型為Boolean的問題
這篇文章主要介紹了解決MyBatis返回結(jié)果類型為Boolean的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11SpringBoot集成minio實現(xiàn)文件上傳和刪除功能
這篇文章主要介紹了SpringBoot集成minio實現(xiàn)文件上傳和刪除功能,詳細介紹每個功能的實現(xiàn)步驟和代碼示例,具有一定的參考價值,感興趣的可以了解一下2023-11-11SpringBoot實現(xiàn)支付寶沙箱支付的完整步驟
沙箱支付是一種用于模擬真實支付環(huán)境的測試工具,它提供了一個安全的測試環(huán)境,供開發(fā)者在不影響真實交易的情況下進行支付功能的開發(fā)和測試,這篇文章給大家介紹了SpringBoot實現(xiàn)支付寶沙箱支付的完整步驟,需要的朋友可以參考下2024-04-04解決SpringCloud Gateway采用OpenFeign遠程調(diào)用失敗的問題
在使用SpringCloud網(wǎng)關(guān)進行統(tǒng)一鑒權(quán)和認證過程中,通過OpenFeign遠程調(diào)用鑒權(quán)服務(wù)器接口時可能會遇到遠程調(diào)用失敗的問題,這通常是因為HttpMessageConverters沒有被正確注入到Spring容器中2024-09-09