Linux專案部署啟停
WEB應用(WAR包)部署
實際開發中,難免遇見新業務專案構建、專案重構(重新最佳化整個專案的架構,相當於重寫),也可能是專案拆分多個模組,也可能部分拆分,但專案的模組化分離,就存在新建專案,新開服務端的可能,在Linux部署中,我們通常遇見需要搭建一個新的服務:
WEB應用(war包):
- 在Linux服務目錄中,安裝適配的Tomcat應用。
- 修改Tomcat相關配置,如下:
- Tomcat應用本身所佔用的埠更新,為什麼改?因為服務中可能存在多個部署應用,就可能存在多個Tomcat服務,多服務應用埠相同會衝突(如果你沒有此需求,可不用改)
- 本次部署WEB應用,所使用的埠更新,為什麼改?因為Tomcat部署載入的服務埠是由Tomcat應用指定配置的,預設此服務啟動後訪問的埠是8080(如果你不擔心衝突或被惡意使用,可不用改)
- 本次部署WEB應用,可支援的遠端跟蹤埠,為什麼改?因為應用有後端服務程式碼,在日誌資訊不全面的情況下,可暫時棄用遠端Debug方式排查業務問題(如果你的日誌資訊非常全面,不需要遠端查問題,可不用改)
- Tomcat目錄下bin包中,給啟停服務指令碼授權允許執行,若有其他授權可自行根據需求新增
- 將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