欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Shell腳本管理Java應用程序的高效方法

 更新時間:2024年09月29日 10:15:59   作者:不掉頭發(fā)的阿水  
在軟件開發(fā)中,管理和監(jiān)控 Java 應用程序的運行狀態(tài)變得愈加重要,本文將分享一個自用的簡單但高效的 Shell 腳本,幫助輕松管理 JAR 包的啟動、停止和日志管理,需要的朋友可以參考下

腳本功能概述

本腳本提供以下主要功能:

  • 檢查 JAR 包的運行狀態(tài)
  • 啟動尚未運行的 JAR 包
  • 停止所有運行中的 JAR 包
  • 刪除 10 天之前的舊日志,并壓縮近期日志

詳細代碼講解

以下是腳本的主要部分,我們將逐段分析其實現(xiàn)邏輯。

  • 創(chuàng)建日志目錄

# 創(chuàng)建日志目錄
[ ! -d "./logs" ] && mkdir ./logs
  • 此部分確保在腳本運行時創(chuàng)建一個日志目錄,以便存儲后續(xù)生成的日志文件。

  • 檢查進程狀態(tài)

check_status() {
    for filename in $filenames; do
        pid=$(ps -ef | grep $filename | grep -v grep | awk '{print $2}')
        if [ -z "$pid" ]; then
            echo "$filename: 該服務未啟動"
        else
            echo "$filename: 該服務正在運行 (PID為: $pid)"
        fi
    done
}
  • 該函數循環(huán)遍歷當前目錄下的所有 JAR 包,使用 ps 命令檢查它們的運行狀態(tài)。如果沒有找到相應的 PID,則表示服務未啟動。

  • 日志清理與壓縮

# 刪除10天之前的日志文件
delete_old_logs() {
    find ./logs -type f -name "*.log" -mtime +10 -exec rm {} \;
    echo "已刪除10天之前的日志文件"
}
 
# 壓縮10天內的老日志
compress_old_logs() {
    find ./logs -type f -name "*.log" -mtime -10 -exec gzip {} \;
    echo "已壓縮10天內的老日志文件"
}
  • 這兩部分負責清理和壓縮日志文件,確保日志目錄不會占用過多空間,保持整潔。

  • 停止進程

stop_all() {
    for filename in $filenames; do
        echo -e "\n------------------------------------------------------"
        echo "嘗試優(yōu)雅停止 $filename 進程"
        ps -ef | grep $filename | grep -v grep | awk '{print $2}' | xargs --no-run-if-empty kill
        sleep 3
        echo "檢查是否有未終止的 $filename 進程,強制結束"
        ps -ef | grep java | grep $filename | grep -v grep | awk '{print $2}' | xargs -r kill -9
        echo "$filename 程序已經停止"
    done
}
  • stop_all 函數嘗試優(yōu)雅地停止所有進程,如果未能成功,則強制結束它們,確保所有服務都已停止。

  • 腳本參數處理

case "$1" in
    status)
        check_status
        ;;
    free)
        for filename in $filenames; do
            ...
        done
        ;;
    stop)
        stop_all
        ;;
    *)
        ...
        ;;
esac
  • 此部分根據用戶輸入的參數執(zhí)行不同的操作,如查看狀態(tài)、啟動或停止服務。

使用示例

要使用該腳本,可以在終端中運行以下命令:

  • 重啟所有JAR包:./your_script.sh
  • 查看 JAR 包狀態(tài):./your_script.sh status
  • 啟動未運行的 JAR 包:./your_script.sh free
  • 停止所有 JAR 包:./your_script.sh stop

注意事項

在運行腳本之前,請確保您擁有足夠的權限,并檢查腳本中的路徑設置,避免權限或路徑錯誤導致的運行失敗。

總結

通過這個簡單的 Shell 腳本,您可以高效地管理 Java 應用程序的運行狀態(tài),確保日志文件的整潔。希望您能根據自己的需求進行修改和擴展,讓腳本更符合您的工作流程。

附錄完整代碼

完整代碼:

#!/bin/bash
 
# 創(chuàng)建日志目錄
[ ! -d "./logs" ] && mkdir ./logs
 
# 獲取當前目錄下所有的 jar 文件名
filenames=$(ls *.jar)
echo "獲取當前目錄下所有的 jar 包文件名"
 
# 定義函數:檢查進程狀態(tài)
check_status() {
    for filename in $filenames; do
        pid=$(ps -ef | grep $filename | grep -v grep | awk '{print $2}')
        if [ -z "$pid" ]; then
            echo "$filename: 該服務未啟動"
        else
            echo "$filename: 該服務正在運行 (PID為: $pid)"
        fi
    done
}
 
# 刪除10天之前的日志文件
delete_old_logs() {
    find ./logs -type f -name "*.log" -mtime +10 -exec rm {} \;
    echo "已刪除10天之前的日志文件"
}
 
# 壓縮10天內的老日志
compress_old_logs() {
    find ./logs -type f -name "*.log" -mtime -10 -exec gzip {} \;
    echo "已壓縮10天內的老日志文件"
}
 
# 定義函數:停止所有進程
stop_all() {
    for filename in $filenames; do
        echo -e "\n------------------------------------------------------"
        echo "嘗試優(yōu)雅停止 $filename 進程"
        ps -ef | grep $filename | grep -v grep | awk '{print $2}' | xargs --no-run-if-empty kill
        sleep 3
        echo "檢查是否有未終止的 $filename 進程,強制結束"
        ps -ef | grep java | grep $filename | grep -v grep | awk '{print $2}' | xargs -r kill -9
        echo "$filename 程序已經停止"
    done
}
 
# 判斷腳本參數
case "$1" in
    status)
        echo "后綴status 查看當前文件夾下所有jar運行狀態(tài)"
        check_status
        ;;
    free)
        echo "后綴free 啟動尚未啟動的 jar 包"
        for filename in $filenames; do
            pid=$(ps -ef | grep $filename | grep -v grep | awk '{print $2}')
            if [ -z "$pid" ]; then
                logname=$(basename $filename .jar)
                timestamp=$(date +"%Y%m%d_%H%M%S")
                echo "開始啟動 $filename"
                nohup java -server -Xms1024m -Xmx1024m -XX:MetaspaceSize=200m -jar $filename >> ./logs/outlog_${logname}_$timestamp.log 2>&1 &
                echo "啟動 $filename 結束,日志輸出到 ./logs/outlog_${logname}_$timestamp.log"
            else
                echo "$filename: 已在運行,跳過啟動"
            fi
        done
        ;;
    stop)
        stop_all
        ;;
    *)
        echo "進行默認選項,重新啟動所有 jar 包(可通過status后綴查看狀態(tài)、free啟動未運行jar服務,stop停止當前目錄下所有jar包服務)"
        stop_all
		# 執(zhí)行日志清理和壓縮
		delete_old_logs
		compress_old_logs
        for filename in $filenames; do
            sleep 2
            logname=$(basename $filename .jar)
            timestamp=$(date +"%Y%m%d_%H%M%S")
            echo "開始啟動 $filename"
            nohup java -server -Xms1024m -Xmx1024m -XX:MetaspaceSize=200m -jar $filename >> ./logs/outlog_${logname}_$timestamp.log 2>&1 &
            sleep 2
            echo "啟動 $filename 結束,日志輸出到 ./logs/outlog_${logname}_$timestamp.log"
        done
        ;;
esac
 
 

以上就是Shell腳本管理Java應用程序的高效方法的詳細內容,更多關于Shell腳本管理Java程序的資料請關注腳本之家其它相關文章!

相關文章

  • SpringBoot的application.yml不生效問題及解決

    SpringBoot的application.yml不生效問題及解決

    這篇文章主要介紹了SpringBoot的application.yml不生效問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java中計算集合的交差并集示例代碼

    java中計算集合的交差并集示例代碼

    今天突然想Java如何計算集合的交差并集,主要是看Python語言的時候想起來的。下面這篇文章主要給大家介紹了關于java中計算集合的交差并集的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-08-08
  • jdbc實現(xiàn)用戶注冊功能代碼示例

    jdbc實現(xiàn)用戶注冊功能代碼示例

    這篇文章主要介紹了jdbc實現(xiàn)用戶注冊功能,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • java編寫簡易貪吃蛇游戲

    java編寫簡易貪吃蛇游戲

    這篇文章主要為大家詳細介紹了java編寫簡易貪吃蛇游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • 基于@RequestParam注解之Spring MVC參數綁定的利器

    基于@RequestParam注解之Spring MVC參數綁定的利器

    這篇文章主要介紹了基于@RequestParam注解之Spring MVC參數綁定的利器,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • SpringBoot登錄用戶權限攔截器

    SpringBoot登錄用戶權限攔截器

    這篇文章主要介紹了SpringBoot登錄用戶權限攔截器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • Spring注解之@Import注解的使用和源碼分析

    Spring注解之@Import注解的使用和源碼分析

    今天主要介紹Spring @Import注解,在Spring中@Import使用得比較頻繁,它得作用是導入bean,具體的導入方式有多種,特別在SpringBoot項目中,很多地方都使用到了@Import注解,感興趣的小伙伴可以參考閱讀
    2023-04-04
  • MyBatisPlus 主鍵策略的實現(xiàn)(4種)

    MyBatisPlus 主鍵策略的實現(xiàn)(4種)

    MyBatis Plus 集成了多種主鍵策略,幫助用戶快速生成主鍵,本文主要介紹了MyBatisPlus主鍵策略的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • springboot aspect通過@annotation進行攔截的實例代碼詳解

    springboot aspect通過@annotation進行攔截的實例代碼詳解

    這篇文章主要介紹了springboot aspect通過@annotation進行攔截的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • 通過idea創(chuàng)建Spring Boot項目并配置啟動過程圖解

    通過idea創(chuàng)建Spring Boot項目并配置啟動過程圖解

    這篇文章主要介紹了通過idea創(chuàng)建Spring Boot項目并配置啟動過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11

最新評論