1. 程式人生 > >Linux 環境部署 jar專案

Linux 環境部署 jar專案

Linux 環境部署 jar專案

在很多小公司,很多時候一個後臺程式設計師還要承擔一部分運維的角色,難免避免不了自己動手上某雲上部署後臺專案,war包暫且這裡就不介紹了,這次主要記錄下部署用maven打包成jar包的專案。



配置java環境

1.檢視操作的系統位數

uname -ar

出現是x86_64說明是 64位的

也可以用getconf LONG_BIT

直接輸出當前系統位數

2.下載jdk

進入orcale官網選擇需要下載的版本jdk1.8傳送門

這裡我選擇的是8u144-b01的rpm包,按照往常linux下的下載命令,我們會使用wget命令進行下載再解壓安裝

wget http://download.oracle.com
/otn-pub/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/jdk-8u144-linux-x64.rpm
  • 1

這裡寫圖片描述

天啦嚕!怎麼下載的是一個 5.2k的html?說好的jdk呢?
我們再仔細看jdk下載頁面,會發現有一個Accept License Agreement需要勾選才能下載 。經過翻閱資料(百度),最終用下面這個命令成功下載了jdk。

wget --no-check-certificate --no-cookie --header "Cookie: oraclelicense=accept-securebackup-cookie;"
http://download.oracle.com/otn-pub/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/jdk-8u144-linux-x64.rpm
  • 1

然後執行rpm -ivh jdk-8u144-linux-x64.rpm安裝jdk
如果下載的是tar.gz包,直接用命令tar -zxvf jdk-8u92-linux-x64.tar.gz解壓即可

3.配置環境變數

執行vi /etc/profile,在檔案末尾新增

export JAVA_HOME=/home/roo/jdk1.8.0_92  (這裡修改為自己的jak安裝路徑)
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  
  • 1
  • 2
  • 3

然後執行java -version看看是否配置成功


配置執行指令碼

1.配置指令碼

選好你要部署到的檔案路徑 ,假設專案名是ABC,這裡我選的是/home/ABC/,然後建立幾個資料夾和一個執行指令碼。

cd /home/ABC
mkdir app
mkdir config
mkdir heapdump
mkdir log
touch  restart.sh
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

目錄結構是
|—–home
|———ABC
|————–app (存放ABC.jar)
|————–config (jar專案的配置檔案{application.yml等},jar專案執行的時候,優先使用這裡的配置檔案,若沒有才使用jar包裡的配置檔案)
|————–heapdump (儲存Heap Dump資訊)
|————–log (相關log)
|————–restart.sh (執行指令碼)

然後進行編寫restart.sh指令碼的內容

#!/bin/bash

base_home='/home/ABC'
app_name='ABC'

pid=`ps -ef|grep ${app_name}|grep -v grep|grep -v restart|awk '{print$2}'`
if [ -n "${pid}" ] ;then
        kill -9 ${pid}
        sleep 10
fi

gclog_file=$base_home/log/gc.log
dump_dir=$base_home/heapdump
errorlogs_dir=$base_home/log

java -Xmx1g -Xms1g -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:+PrintGCDetails  -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation  -XX:GCLogFileSize=128M  -XX:NumberOfGCLogFiles=1  -Xloggc:${gclog_file} -XX:HeapDumpPath=${dump_dir} -jar $base_home/app/${app_name}.jar --spring.config.location=$base_home/config/application.yml >> $base_home/log/${app_name}_$(date +'%Y%m%d').log &
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

2.解釋指令碼內容

  • base_home='/home/ABC' : ABC專案的根路徑
  • app_name='ABC' : 專案名稱(即/home/ABC/app/ABC.jar的檔名)
  • pid=`ps -ef|grep ${app_name}|grep -v grep|grep -v restart|awk '{print$2}'` : 找到ABC專案當前執行的程序號(若有)

  • if [ -n "${pid}" ] ;then
    kill -9 ${pid}
    sleep 10
    fi
    : 若ABC專案已執行,根據上一步驟獲得的pid可以殺死當前執行ABC專案的程序
  • gclog_file=$base_home/log/gc.log
  • dump_dir=$base_home/heapdump
  • errorlogs_dir=$base_home/log

最後的執行命令有點複雜,讓我們一個個解讀

  • 這麼長的命令,其實執行起來的命令是很簡單java -jar $base_home/app/${app_name}.jar &,這樣即可成功執行起來,& 是讓此命令後臺執行 ,這裡這麼複雜是進行了jvm優化。
  • -Xmx1g : 設定JVM最大可用記憶體為1g。
  • -Xms1g : 設定JVM促使記憶體為1g。此值可以設定與-Xmx相同,以避免每次垃圾回收完成後JVM重新分配記憶體。
  • -XX:+UseParallelGC : 選擇垃圾收集器為並行收集器。
  • -XX:+UseParallelOldGC : 配置年老代垃圾收集方式為並行收集。
  • -XX:+PrintGCDetails : 可以詳細瞭解GC中的變化。
  • -XX:+PrintGCTimeStamps : 配合上面的PrintGCDetails,可以瞭解這些垃圾收集發生的時間,自JVM啟動以後以秒計量。
  • -XX:+UseGCLogFileRotation : 啟用GC日誌檔案的自動轉儲。
  • -XX:GCLogFileSize=128M : 控制GC日誌檔案的大小。
  • -XX:NumberOfGCLogFiles=1 : GC日誌檔案的迴圈數目。
  • -Xloggc:${gclog_file} : 把gc日誌資訊記錄到檔案gclog_file=$base_home/log/gc.log
  • -XX:HeapDumpPath=${dump_dir} : 將Heap Dump資訊儲存到dump_dir=$base_home/heapdump
  • --spring.config.location=$base_home/config/application.yml : 執行的配置檔案,若沒有config/application.yml,則用jar裡的配置檔案。
  • >> $base_home/log/${app_name}_$(date +'%Y%m%d').log 將執行的log資訊儲存到$base_home/log 資料夾下,log檔案會以日期命名${app_name}_$(date +'%Y%m%d').log 最終的名字可能是ABC_20171206.log

3.使用

經過對restart.sh 指令碼的編寫,然後執行chmod +x restart.sh 這個指令碼就可以正常運行了
sh restart.sh(要確保ABC.jar包已經上傳到app/資料夾下)

Linux 環境部署 jar專案

在很多小公司,很多時候一個後臺程式設計師還要承擔一部分運維的角色,難免避免不了自己動手上某雲上部署後臺專案,war包暫且這裡就不介紹了,這次主要記錄下部署用maven打包成jar包的專案。