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

Linux中使用shell腳本管理Java應(yīng)用程序

 更新時(shí)間:2024年06月15日 11:18:37   作者:BigDataMagician  
在日常開發(fā)和運(yùn)維工作中,管理基于Java的應(yīng)用程序是一項(xiàng)基礎(chǔ)且頻繁的任務(wù),本文將通過一個(gè)示例腳本,展示如何利用Shell腳本簡化這一流程,實(shí)現(xiàn)Java應(yīng)用的一鍵式啟動、停止與重啟操作,本腳本不僅提升了工作效率,還確保了操作的標(biāo)準(zhǔn)化與可靠性

在日常開發(fā)和運(yùn)維工作中,管理基于Java的應(yīng)用程序是一項(xiàng)基礎(chǔ)且頻繁的任務(wù)。本文將通過一個(gè)示例腳本,展示如何利用Shell腳本簡化這一流程,實(shí)現(xiàn)Java應(yīng)用的一鍵式啟動、停止與重啟操作。本腳本不僅提升了工作效率,還確保了操作的標(biāo)準(zhǔn)化與可靠性。

前言

Shell 是一個(gè)用 C 語言編寫的程序,它是用戶使用 Linux 的橋梁。Shell 既是一種命令語言,又是一種程序設(shè)計(jì)語言。Shell 是指一種應(yīng)用程序,這個(gè)應(yīng)用程序提供了一個(gè)界面,用戶通過這個(gè)界面訪問操作系統(tǒng)內(nèi)核的服務(wù)。Ken Thompson 的 sh 是第一種 Unix Shell,Windows Explorer 是一個(gè)典型的圖形界面 Shell。

一、目錄結(jié)構(gòu)

這是一個(gè)典型的Java項(xiàng)目部署結(jié)構(gòu),其中user_defined目錄用于存放管理應(yīng)用的各種腳本,其下細(xì)分有多個(gè)子目錄以組織不同的資源。

.
├─user_defined     # 使用者自定義目錄名      
│  ├─bin           # 腳本存放目錄
│  ├─conf          # 配置文件目錄
│  ├─lib           # 應(yīng)用依賴的jar包存放目錄
│  ├─log           # 應(yīng)用日志輸出目錄
│  ├─pid           # 存放進(jìn)程ID文件的目錄
│  └─sql           # SQL腳本或數(shù)據(jù)相關(guān)文件

二、腳本實(shí)現(xiàn)

1. 腳本內(nèi)容

#!/bin/bash

# 檢查腳本是否被傳遞了有效的命令
if [ -z "$1" ]; then
  echo "Usage: $0 {start|stop|restart}"
  exit 1
fi

# jar包名稱,不帶.jar后綴
JAR_NAME='example'
# 獲取當(dāng)前腳本所在的目錄
SCRIPT_BIN="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# jar包主目錄
JARPACKAGE_HOME="$SCRIPT_BIN/.."

# 設(shè)置jar包的路徑
JAR_PATH="$JARPACKAGE_HOME/lib/$JAR_NAME.jar"

# 檢查當(dāng)前目錄下是否存此jar文件
if [ ! -f "$JAR_PATH" ]; then
  echo "Error: $JAR_NAME.jar not found."
  exit 1
fi

# 定義運(yùn)行的Java命令
JAVA_CMD="java -jar $JAR_PATH"

# 創(chuàng)建pid目錄,如果不存在
PID_DIR="$JARPACKAGE_HOME/pid"
mkdir -p "$PID_DIR"

# 啟動jar包
start() {
  echo "Starting jar package..."
  # nohup $JAVA_CMD > /dev/null 2>&1 &
  # 使用nohup在后臺運(yùn)行jar包,并將日志輸出到文件
  nohup $JAVA_CMD > $JARPACKAGE_HOME/log/${JAR_NAME}.log 2>&1 &
  echo $! > "$PID_DIR/$JAR_NAME.pid"
  echo "Jar package is started. pid is saved in $PID_DIR/$JAR_NAME.pid"
}

# 停止jar包
stop() {
  echo "Stopping jar package..."
  PID=$(cat "$PID_DIR/$JAR_NAME.pid")
  if [ -n "$PID" ]; then
    kill $PID
    echo "Jar package has been stopped"
    yes | rm "$PID_DIR/$JAR_NAME.pid"
  else
    echo "Error: Jar package is not running."
  fi
}

# 重啟jar package
restart() {
  echo "Restarting jar package..."
  stop
  sleep 3
  start
}

# 根據(jù)傳入的參數(shù)調(diào)用相應(yīng)的方法
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    restart
    ;;
  *)
    echo "Error: Invalid command. Use {start|stop|restart}."
    exit 1
    ;;
esac

exit 0

2. 使用說明

2.1 配置腳本

  • 修改腳本以適配你的應(yīng)用:打開提供的Shell腳本模板,找到JAR_NAME變量,將其值更改為你的Java應(yīng)用程序jar包名稱(不包含.jar后綴)。如果Java應(yīng)用運(yùn)行時(shí)需要額外參數(shù),可以在JAVA_CMD變量中追加這些參數(shù)。

2.2 腳本部署

  • 保存腳本:將修改后的腳本保存為.sh文件,推薦命名為與你的應(yīng)用相關(guān)的易于識別的名字,如myapp-manager.sh。

  • 構(gòu)建目錄結(jié)構(gòu):依據(jù)之前提到的目錄結(jié)構(gòu)圖,在你的工作目錄下創(chuàng)建相應(yīng)的目錄。確保bin目錄下存放著你的Shell腳本,而lib目錄內(nèi)則需放入對應(yīng)的jar包。

2.3 操作你的Java應(yīng)用

  • 啟動應(yīng)用:通過終端切換到腳本所在的bin目錄,然后運(yùn)行以下命令啟動應(yīng)用:

    ./myapp-manager.sh start
    

    這將會后臺啟動你的Java應(yīng)用,并將輸出信息保存到log目錄下.log結(jié)尾的日志文件中,同時(shí)在pid目錄下生成一個(gè)包含應(yīng)用進(jìn)程ID的文件。

  • 停止應(yīng)用:當(dāng)需要關(guān)閉應(yīng)用時(shí),執(zhí)行:

    ./myapp-manager.sh stop
    

    此命令會讀取PID文件,發(fā)送終止信號給應(yīng)用進(jìn)程,并清理PID文件。

  • 重啟應(yīng)用:如果需要重啟應(yīng)用以應(yīng)用最新更改,僅需輸入:

    ./myapp-manager.sh restart
    

    這個(gè)操作會自動完成停止和再次啟動的全過程,中間包含短暫的等待時(shí)間以確保平穩(wěn)過渡。

總結(jié)

通過上述Shell腳本,我們不僅實(shí)現(xiàn)了Java應(yīng)用的便捷管理,還保證了操作的自動化與標(biāo)準(zhǔn)化,大大減輕了運(yùn)維負(fù)擔(dān)。無論是日常開發(fā)調(diào)試還是生產(chǎn)環(huán)境的部署維護(hù),這樣的腳本都是提升效率的利器。

到此這篇關(guān)于Linux中使用shell腳本管理Java應(yīng)用程序的文章就介紹到這了,更多相關(guān)Linux中shell管理Java內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java的抽象方法和抽象類實(shí)例詳解

    Java的抽象方法和抽象類實(shí)例詳解

    這篇文章主要介紹了Java的抽象方法和抽象類,結(jié)合實(shí)例形式詳細(xì)分析了java抽象方法和抽象類的相關(guān)原理、使用方法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • Java如何操作MongoDB常用API文檔

    Java如何操作MongoDB常用API文檔

    這篇文章主要介紹了Java如何操作MongoDB常用API文檔,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 詳解spring cloud使用Hystrix實(shí)現(xiàn)單個(gè)方法的fallback

    詳解spring cloud使用Hystrix實(shí)現(xiàn)單個(gè)方法的fallback

    本篇文章主要介紹了詳解spring cloud-使用Hystrix實(shí)現(xiàn)單個(gè)方法的fallback,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • MyBatis的各種查詢功能結(jié)果接收類型的選擇(推薦)

    MyBatis的各種查詢功能結(jié)果接收類型的選擇(推薦)

    文章介紹了MyBatis中查詢結(jié)果的不同接收方式,包括單條數(shù)據(jù)和多條數(shù)據(jù)的處理方法,以及MyBatis的默認(rèn)類型別名,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • SpringBoot性能優(yōu)化的其中配置方法

    SpringBoot性能優(yōu)化的其中配置方法

    SpringBoot作為Java生態(tài)中最流行的微服務(wù)框架之一,以其開箱即用、快速開發(fā)的特性贏得了廣泛青睞,然而,許多開發(fā)者在日常使用中往往只關(guān)注了基礎(chǔ)功能,忽略了框架提供的許多高性能配置選項(xiàng),本文將深入剖析7個(gè)鮮為人知但極具價(jià)值的SpringBoot配置技巧
    2025-09-09
  • Spring Security6 最新版配置及實(shí)現(xiàn)動態(tài)權(quán)限管理

    Spring Security6 最新版配置及實(shí)現(xiàn)動態(tài)權(quán)限管理

    Spring Security 在最近幾個(gè)版本中配置的寫法都有一些變化,很多常見的方法都廢棄了,并且將在未來的 Spring Security7 中移除,因此又補(bǔ)充了一些新的內(nèi)容,重新發(fā)一下,供各位使用 Spring Security 的小伙伴們參考,需要的朋友可以參考下
    2024-03-03
  • 教你怎么使用Java實(shí)現(xiàn)WebSocket

    教你怎么使用Java實(shí)現(xiàn)WebSocket

    這篇文章主要介紹了教你怎么使用Java WebSocket,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • 探討:如何在NDK中呼叫Java的class

    探討:如何在NDK中呼叫Java的class

    本篇文章是對如何在NDK中呼叫Java的class進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • spring?boot項(xiàng)目中集成rocketmq詳細(xì)步驟

    spring?boot項(xiàng)目中集成rocketmq詳細(xì)步驟

    這篇文章主要給大家介紹了關(guān)于spring?boot項(xiàng)目中集成rocketmq的相關(guān)資料,springboot集成rocketmq的方法非常簡單,文中直接上代碼,需要的朋友可以參考下
    2023-09-09
  • Spring?boot數(shù)據(jù)庫依賴詳解

    Spring?boot數(shù)據(jù)庫依賴詳解

    這篇文章主要介紹了Spring?boot數(shù)據(jù)庫依賴,需要的朋友可以參考下
    2023-09-09

最新評論