使用shell指令碼在Linux中管理Java應用程式

BigDataMagician發表於2024-06-14

目錄
  • 前言
  • 一、目錄結構
  • 二、指令碼實現
    • 1. 指令碼內容
    • 2. 使用說明
      • 2.1 配置指令碼
      • 2.2 指令碼部署
      • 2.3 操作你的Java應用
  • 總結


前言

在日常開發和運維工作中,管理基於Java的應用程式是一項基礎且頻繁的任務。本文將透過一個示例指令碼,展示如何利用Shell指令碼簡化這一流程,實現Java應用的一鍵式啟動、停止與重啟操作。本指令碼不僅提升了工作效率,還確保了操作的標準化與可靠性。


一、目錄結構

這是一個典型的Java專案部署結構,其中user_defined目錄用於存放管理應用的各種指令碼,其下細分有多個子目錄以組織不同的資源。

.
├─user_defined     # 使用者自定義目錄名      
│  ├─bin           # 指令碼存放目錄
│  ├─conf          # 配置檔案目錄
│  ├─lib           # 應用依賴的jar包存放目錄
│  ├─log           # 應用日誌輸出目錄
│  ├─pid           # 存放程序ID檔案的目錄
│  └─sql           # SQL指令碼或資料相關檔案

二、指令碼實現

1. 指令碼內容

#!/bin/bash

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

# jar包名稱,不帶.jar字尾
JAR_NAME='example'
# 獲取當前指令碼所在的目錄
SCRIPT_BIN="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# jar包主目錄
JARPACKAGE_HOME="$SCRIPT_BIN/.."

# 設定jar包的路徑
JAR_PATH="$JARPACKAGE_HOME/lib/$JAR_NAME.jar"

# 檢查當前目錄下是否存此jar檔案
if [ ! -f "$JAR_PATH" ]; then
  echo "Error: $JAR_NAME.jar not found."
  exit 1
fi

# 定義執行的Java命令
JAVA_CMD="java -jar $JAR_PATH"

# 建立pid目錄,如果不存在
PID_DIR="$JARPACKAGE_HOME/pid"
mkdir -p "$PID_DIR"

# 啟動jar包
start() {
  echo "Starting jar package..."
  # nohup $JAVA_CMD > /dev/null 2>&1 &
  # 使用nohup在後臺執行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
}

# 根據傳入的引數呼叫相應的方法
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 配置指令碼

  1. 修改指令碼以適配你的應用:開啟提供的Shell指令碼模板,找到JAR_NAME變數,將其值更改為你的Java應用程式jar包名稱(不包含.jar字尾)。如果Java應用執行時需要額外引數,可以在JAVA_CMD變數中追加這些引數。

2.2 指令碼部署

  1. 儲存指令碼:將修改後的指令碼儲存為.sh檔案,推薦命名為與你的應用相關的易於識別的名字,如myapp-manager.sh

  2. 構建目錄結構:依據之前提到的目錄結構圖,在你的工作目錄下建立相應的目錄。確保bin目錄下存放著你的Shell指令碼,而lib目錄內則需放入對應的jar包。

2.3 操作你的Java應用

  1. 啟動應用:透過終端切換到指令碼所在的bin目錄,然後執行以下命令啟動應用:

    ./myapp-manager.sh start
    

    這將會後臺啟動你的Java應用,並將輸出資訊儲存到log目錄下.log結尾的日誌檔案中,同時在pid目錄下生成一個包含應用程序ID的檔案。

  2. 停止應用:當需要關閉應用時,執行:

    ./myapp-manager.sh stop
    

    此命令會讀取PID檔案,傳送終止訊號給應用程序,並清理PID檔案。

  3. 重啟應用:如果需要重啟應用以應用最新更改,僅需輸入:

    ./myapp-manager.sh restart
    

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


總結

透過上述Shell指令碼,我們不僅實現了Java應用的便捷管理,還保證了操作的自動化與標準化,大大減輕了運維負擔。無論是日常開發除錯還是生產環境的部署維護,這樣的指令碼都是提升效率的利器。

希望本教程對您有所幫助!如有任何疑問或問題,請隨時在評論區留言。感謝閱讀!

相關文章