最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Shell腳本管理Java應(yīng)用程序的高效方法

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

腳本功能概述

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

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

詳細(xì)代碼講解

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

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

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

  • 檢查進(jìn)程狀態(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: 該服務(wù)未啟動"
        else
            echo "$filename: 該服務(wù)正在運行 (PID為: $pid)"
        fi
    done
}
  • 該函數(shù)循環(huán)遍歷當(dāng)前目錄下的所有 JAR 包,使用 ps 命令檢查它們的運行狀態(tài)。如果沒有找到相應(yīng)的 PID,則表示服務(wù)未啟動。

  • 日志清理與壓縮

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

  • 停止進(jìn)程

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

  • 腳本參數(shù)處理

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

使用示例

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

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

注意事項

在運行腳本之前,請確保您擁有足夠的權(quán)限,并檢查腳本中的路徑設(shè)置,避免權(quán)限或路徑錯誤導(dǎo)致的運行失敗。

總結(jié)

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

附錄完整代碼

完整代碼:

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

以上就是Shell腳本管理Java應(yīng)用程序的高效方法的詳細(xì)內(nèi)容,更多關(guān)于Shell腳本管理Java程序的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java獲取Object中Value的實現(xiàn)方法

    Java獲取Object中Value的實現(xiàn)方法

    本文介紹了在Java中獲取對象屬性值的幾種常見方法,包括使用反射機(jī)制、getter方法、接口或抽象類、Map數(shù)據(jù)結(jié)構(gòu)、序列化與反序列化以及JavaBeans規(guī)范,每種方法都有其適用場景和優(yōu)缺點,選擇合適的方法取決于具體需求
    2025-03-03
  • 詳解Java中如何定義和訪問靜態(tài)字段和方法

    詳解Java中如何定義和訪問靜態(tài)字段和方法

    在面向?qū)ο蟮某绦蛟O(shè)計中,我們通常使用類來創(chuàng)建對象,類中有許多成員變量和方法,它們是直接屬于對象實例的,與之對應(yīng)的還有一類成員,那就是靜態(tài)成員,本文就來和大家聊聊Java是如何定義訪問靜態(tài)成員的吧
    2023-05-05
  • Java MyBatis返回兩個字段作為Map的key和value問題

    Java MyBatis返回兩個字段作為Map的key和value問題

    使用MyBatis查詢兩個字段并返回Map時,需要注意數(shù)據(jù)量和值的類型,直接返回Map會導(dǎo)致報錯,使用@MapKey注解可以生成Map,但值是對象而不是直接值,為了解決這個問題,可以自定義一個Map結(jié)果處理器MapResultHandler
    2024-12-12
  • Java處理JSON編程實用技巧和性能優(yōu)化

    Java處理JSON編程實用技巧和性能優(yōu)化

    JSON解析是Java Web開發(fā)的核心技能,用于服務(wù)端和客戶端間數(shù)據(jù)交換,下面這篇文章主要介紹了Java處理JSON編程實用技巧和性能優(yōu)化的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-11-11
  • 淺談為什么Java中1000==1000為false而100==100為true

    淺談為什么Java中1000==1000為false而100==100為true

    這篇文章主要介紹了淺談為什么Java中1000==1000為false而100==100為true,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • SpringBoot3集成swagger文檔的使用方法

    SpringBoot3集成swagger文檔的使用方法

    本文介紹了Swagger的誕生背景、主要功能以及如何在Spring Boot 3中集成Swagger文檔,Swagger可以幫助自動生成API文檔,實現(xiàn)與代碼同步,并提供交互式測試功能,使用方法包括導(dǎo)入依賴、配置文檔、使用常見注解以及訪問生成的Swagger UI和文檔,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • 詳細(xì)說一說Java自動裝箱與拆箱是什么

    詳細(xì)說一說Java自動裝箱與拆箱是什么

    自動裝箱與拆箱的機(jī)制可以讓我們在Java的變量賦值或者是方法調(diào)用等情況下使用原始類型或者對象類型更加簡單直接,這篇文章主要介紹了Java自動裝箱與拆箱是什么的相關(guān)資料,需要的朋友可以參考下
    2025-10-10
  • 分析ZooKeeper分布式鎖的實現(xiàn)

    分析ZooKeeper分布式鎖的實現(xiàn)

    在分布式的情況下,sychornized 和 Lock 已經(jīng)不能滿足我們的要求了,那么就需要使用第三方的鎖了,這里我們就使用 ZooKeeper 來實現(xiàn)一個分布式鎖
    2021-06-06
  • 詳解如何查看Elasticsearch的Debug日志

    詳解如何查看Elasticsearch的Debug日志

    這篇文章主要為大家介紹了詳解如何查看Elasticsearch的Debug日志,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Spring Boot Logback配置日志過程解析

    Spring Boot Logback配置日志過程解析

    這篇文章主要介紹了Spring Boot Logback配置日志過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10

最新評論

屏南县| 西和县| 自贡市| 沂南县| 哈密市| 泾川县| 巴林右旗| 安顺市| 江油市| 乌鲁木齐市| 林甸县| 祁东县| 石狮市| 福安市| 平乡县| 贺兰县| 武川县| 红河县| 深圳市| 无锡市| 平塘县| 三明市| 宁武县| 邵阳县| 西丰县| 德格县| 新干县| 宁城县| 沈丘县| 嘉兴市| 垫江县| 黑龙江省| 威信县| 台中市| 卢湾区| 昆明市| 渭源县| 安国市| 辽阳市| 锡林浩特市| 兴山县|