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
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包的專案。