linux服務器部署jar包以及shell腳本的書寫

背景:記錄在linux環境下部署jar程序的過程java

1 部署過程記錄

1.1 程序結構

這裏的main函數就在DemRest2.java 文件中。linux

爲了部署方便,要作到如下兩點:web

1 在導出的jar包中不包含依賴的jar文件shell

2 程序用到的配置文件可讓用戶進行自定義 ,不將其放在jar包中。編程

1.2 導出jar包

這裏導出普通的jar包便可。爲了方便傳輸,只導出必須的程序文件。vim

在jar包導出後,進入導出的jar包中,將配置文件tws.properties文件刪除。windows

1.3 程序部署

將全部須要的jar包放在lib目錄下面,包括咱們導出工程的jar包tws-client-demo.jartomcat

在用戶自定義目錄中,放置運行腳本和配置文件。bash

ps:運行腳本所在的目錄,就至關於程序運行的根目錄,全部的配置文件和運行腳本放置在同一目錄便可。app

這裏程序中怎麼讀取配置文件,還須要好好研究。。。。。。。

#!/bin/sh
sourceMsgPath=/home/tws/server/tws-test/userMsg/lxw/

source /etc/profile
for i in $HOME/server/tws-test/lib/*;
    do CLASSPATH=$i:"$CLASSPATH";
done
export CLASSPATH=.:${CLASSPATH}
java  demo.rest.DemRest2 $sourceMsgPath$1

echo "Success!"

 對照以上腳本進行解釋:

運行程序:

在用戶目錄下面,程序可以讀到jar包外部的配置文件。

 2 標準腳本

 在網上找的一個腳本範例:

在編寫shell腳本出現錯誤時候,能夠做爲參考:

#! /bin/sh
export JAVA_HOME=/usr/java/jdk1.6.0_18
export CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
for i in lib/*.jar; 
        do CLASSPATH=$i:${CLASSPATH} 
done
export CLASSPATH=.:${CLASSPATH}
java -cp ${CLASSPATH} main方法所在包名.main方法所在的類名
若是上述腳本不能順利執行,能夠嘗試
#!/bin/bash後追加

source /etc/profile
source ~/.bash_profile
 測試下。。

java -cp java的cp命令

java -cp .;c:\dir1\lib.jar Test
 
-cp 和 -classpath 同樣,是指定類運行所依賴其餘類的路徑,一般是類庫,jar包之類,須要全路徑到jar包,window上分號「;」
 
分隔,linux上是分號「:」分隔。不支持通配符,須要列出全部jar包,用一點「.」表明當前路徑。

3 半自動化工程部署

ps:在處理第三方管理平臺項目時候,忽然想寫一個自動化的shell腳本,其實腳本很簡單,只不過前期走了些彎路,雖然說麻煩,可是對本身來講也是一次提升。
 
我遇到的問題是
ps:剛開始我還覺得是腳本語法問題,後來網上搜索才知道是這個問題。解決後,後面的腳本就是經常使用命令的集合。

問題:經過ftp傳輸工具在windows下編輯的腳本,在執行的時候會出現no such file or directory狀況。
是由於平臺不一樣致使的。執行下列命令便可
INUX下SHELL編程腳本沒法執行,提示no such file or directory.
sudo vim xx.sh
:set ff=unix
:wq
就OK了
(若是是在windows裏寫的腳本,你輸入:set ff 應該顯示的是DOS)

最終的shell腳本:
#!/bin/bash
#war包上傳臨時目錄
warPath=/usr/local/tmp-tms
#tomcat中webapps中文件
service_webapps=/usr/local/service-tomcat7/webapps
web_webapps=/usr/local/web-tomcat7/webapps
#待替換的配置文件
from_service_config=$warPath/224-service
to_service_config=$service_webapps/tms_service/WEB-INF/classes
from_web_config=$warPath/224-web
to_web_config=$web_webapps/tms/WEB-INF/classes

deployService(){
    #清空tomcat  webapps下的文件
    rm -rf $service_webapps/*
    echo "完成臨時目錄的清理:$service_webapps"
    #移動war文件到webappps目錄
    mv $warPath/tms_service.war $service_webapps
    echo "完成war文件的移動:$service_webapps/tms_service.war"
    #解壓war包
    cd $service_webapps
    unzip tms_service.war -d tms_service
    echo "完成war文件解壓:$service_webapps/tms_service.war"
    #替換war中的配置文件
    cp $from_service_config/log4j.properties $to_service_config/log4j.properties
    cp $from_service_config/resources.properties $to_service_config/resources.properties
    cp $from_service_config/service.xml $to_service_config/service.xml
    echo "完成Service工程配置文件的替換!"
}

deployWeb(){
    #清空tomcat  webapps下的文件
    rm -rf $web_webapps/*
    echo "完成臨時目錄的清理:$web_webapps"
    #移動war文件到webappps目錄
    mv $warPath/tms.war $web_webapps
    echo "完成war文件的移動:$web_webapps/tms.war"
    #解壓war包
    cd $web_webapps
    unzip tms.war -d tms
    echo "完成war文件解壓:$web_webapps/tms.war"
    #替換war中的配置文件
    cp $from_web_config/log4j.properties $to_web_config/log4j.properties
    cp $from_web_config/service.xml $to_web_config/service.xml
    cp $from_web_config/tms.properties $to_web_config/tms.properties
    echo "完成web工程配置文件的替換!"
}

##############腳本入口
#./deploy.sh service      ---只部署service
#./deploy.sh web          ---只部署web
#./deploy.sh both           ---同時部署service和web

if [ $1 == "service" ]
then
    deployService
   echo "只部署service,successful"
elif [ $1 == "web" ]
then
    deployWeb
   echo "只部署web,successful"
elif [ $1 == "both" ]
then
   deployService
   sleep 10
   deployWeb
   echo "同時部署service和web,successful!"
else
   echo "請輸入一個正確參數:service web both"
fi
View Code

 用到啥就去查什麼,一切都不是困難,態度決定成效!!!!

相關文章
相關標籤/搜索