背景介紹:
在服務器部署jar包,以前都是在Windows打包然後上傳到服務器,再通過命令 java -jar xxx.jar 部署,感覺很繁瑣,所以就寫了個腳本,自動 pull 遠程倉庫代碼,然後打包,部署。
出現問題:
先寫了一步獲取 jar 包進程的 pid命令
#!/bin/sh
pid=$(ps -ef|grep bigbang.jar | grep -v grep | awk '{print $2}')
echo $pid
當執行這個腳本時,報錯如下:
分析原因:
因爲這個腳本最開始是windows下寫好,上傳到服務器上的,windows 下回車符和linux下回車符解析是不一樣的,所以纔會出現上述問題。
解決方法:
在腳本中使用 set ff=unix ,告訴 vi 編輯器,使用unix換行符
這樣再次執行這個腳本時,就能成功獲取線程pid了
貼一個從遠程倉庫拉去最新代碼、打包、部署的腳本:
#! /bin/sh
#要部署jar的名字
jarName=bigbang.jar
#項目的根目錄
cd /usr/local/bigbang/bigbang-git/bigbangspring
#拉去倉庫最新代碼
git pull
#開始使用maven打包
mvn clean package -DskipTests
#打包結束,cd 到項目target目錄,打好jar就在該目錄下面
cd /usr/local/bigbang/bigbang-git/bigbangspring/target
#殺死當前已部署的jar包進程
pid=$(ps -ef|grep $jarName | grep -v grep | awk '{print $2}')
kill -9 ${pid}
#開始部署jar包
nohup java -jar -Dfile.encoding=UTF-8 $jarName >/dev/null 2>&1 &
爲了更好地看到腳本執行流程,可以在每一步輸出相應的提示語句,這樣整個流程就比較清楚,腳本執行到哪一步報錯,都能一清二楚,快速定位錯誤位置。