Linu部署服務啟停指令碼

净重21克發表於2024-06-06

Linux專案部署啟停

WEB應用(WAR包)部署

  實際開發中,難免遇見新業務專案構建、專案重構(重新最佳化整個專案的架構,相當於重寫),也可能是專案拆分多個模組,也可能部分拆分,但專案的模組化分離,就存在新建專案,新開服務端的可能,在Linux部署中,我們通常遇見需要搭建一個新的服務:

  WEB應用(war包):

  1. 在Linux服務目錄中,安裝適配的Tomcat應用。
  2. 修改Tomcat相關配置,如下:
    • Tomcat應用本身所佔用的埠更新,為什麼改?因為服務中可能存在多個部署應用,就可能存在多個Tomcat服務,多服務應用埠相同會衝突(如果你沒有此需求,可不用改)
    • 本次部署WEB應用,所使用的埠更新,為什麼改?因為Tomcat部署載入的服務埠是由Tomcat應用指定配置的,預設此服務啟動後訪問的埠是8080(如果你不擔心衝突或被惡意使用,可不用改)
    • 本次部署WEB應用,可支援的遠端跟蹤埠,為什麼改?因為應用有後端服務程式碼,在日誌資訊不全面的情況下,可暫時棄用遠端Debug方式排查業務問題(如果你的日誌資訊非常全面,不需要遠端查問題,可不用改)
  3. Tomcat目錄下bin包中,給啟停服務指令碼授權允許執行,若有其他授權可自行根據需求新增
  4. 將war包放入到Tomcat安裝目錄下(webapps/...)部署,啟動服務

  Tomcat的暫時先不寫了,後面有時間再說,此處臨時記錄。上面的基本夠用了

JAR應用(JAR包)部署

  Java應(jar包):

  常見jarbao為boot應用,無需手動配置Tomcat,當然,如果你沒有使用Boot的Tomcat,可以手動配置安裝Tomcat(略)

  1.LInux應用目錄下,新建服務包

  2.新建檔案字尾為 .sh 下,命名個人習慣(如restart.sh、stop.sh)restart.sh - 用於重啟服務,stop.sh - 用於停止服務

  3.編輯檔案,示例程式碼如下,可根據個人情況修改:

 服務重新啟動指令碼(restart.sh)

  以下是重啟服務指令碼,stop的,自行根據下面的改編吧

 1 #!/bin/bash
 2 
 3 # 定義服務名稱、日誌檔案路徑、jar檔案路徑和JDK路徑、服務JVM相關引數(啟動Boot遠端埠服務,埠設定為:9099)、其他命令列  
 4 #######把他理解為變數定義,名字這些都是自己定,無特定限制,資料值改為你自己的即可,定義好的變數透過 ${名字} 來使用 #######
 5 SERVICE_NAME="AutoTask"
 6 LOG_FILE="/opt/boot/AutoTask/autoTask.log"
 7 JAR_FILE="/opt/boot/AutoTask/autoTask-0.0.1-SNAPSHOT.jar"
 8 JDK_HOME="/home/java/jdk1.8.0_112/"
 9 JAVA_OPTIONS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9099" # 示例JVM引數
10 LOG_VIEWER="tail -f" # 用於檢視日誌的命令
11 
12 
13 # 定義一個:啟動服務的函式(只有被呼叫才執行)
14 start_service() {
15     echo "$(date): 正在啟動 $SERVICE_NAME 服務..."
16     nohup ${JDK_HOME}/bin/java "$JAVA_OPTIONS" -jar "$JAR_FILE" --spring.profiles.active=test --server.port=5090 >> "$LOG_FILE" 2>&1 &
17     echo "$(date): $SERVICE_NAME 服務啟動成功"
18 }
19 
20 # 定義程序pid  變數
21 pid=""
22 # 定義查詢服務程序PID的方法 (只有被呼叫才執行)
23 query(){
24     # 查詢並賦值 (這裡指定了管道查詢,獲取服務程序的)
25     pid=`ps uxf | grep ${JAR_FILE} | grep -v grep | awk '{print $2}'`
26 }
27 
28 # 停止服務的函式(只有被呼叫才執行)
29 stop_service() {
30     echo "$(date): 正在停止 $SERVICE_NAME 服務..."
31     # 執行一次查詢PID,實現賦值
32     query
33     #檢查PID是否為空
34     if [ x"${pid}" != x"" ];  then
35         # 停止服務,並提示服務正在停止中....
36         kill -9 ${pid}
37         echo "${JAR_FILE} (pid : ${pid}) exiting......"
38         # 利用while迴圈特性(校驗pid不為空,執行查詢)
39         while [ x"${pid}" != x"" ]
40             do
41             # 間隔5秒再次執行查詢,確認是否停止
42             sleep 3
43             query
44             echo "$Please wait a moment......$(date): 等待 $SERVICE_NAME 服務停止..."
45         done
46             # 當程式走到這,說明上面查詢已經是空了,可以輸出停止完畢了
47             echo "$(date) : is OK , $SERVICE_NAME exited.服務停止成功"
48     else
49         echo "HI , ${JAR_FILE} already stopped."
50     fi
51 }
52 
53 # 檢查服務是否正在執行的函式
54 is_service_running() {
55     pgrep -f "$JAR_FILE"
56     return $? # 0表示執行,非0表示未執行
57 }
58 
59 # 根據服務狀態執行相應操作(執行如果服務沒有停止,那麼執行stop_service停止服務)
60 if is_service_running;  then
61     stop_service
62 fi
63 
64 #執行啟動服務
65 start_service
66 
67 
68 # 檢查日誌檔案並嘗試開啟
69 if [ -f "$LOG_FILE" ]; then
70     echo "服務已啟動,正在開啟日誌檔案 $LOG_FILE 檢視最新日誌..."
71     # 如果您想要在後臺執行 tail -f 並讓指令碼繼續執行其他任務,取消下面的註釋
72     # $LOG_VIEWER "$LOG_FILE" &
73     # 如果您想要指令碼停留在 tail -f 上,則保持當前狀態
74     $LOG_VIEWER "$LOG_FILE"
75 else
76     echo "日誌檔案 $LOG_FILE 不存在,請確保日誌檔案路徑正確且服務已開始寫入日誌。"
77 fi

相關文章