shell重新發布(redeploy)服務
阿新 • • 發佈:2018-12-12
開始接觸一些釋出應用的工作內容。簡單的需求是這樣的:
應用服務在新增新功能或者需求之後需要更新到應用伺服器。涉及到工作內容有:
- 備份當前的服務jar包到備份路徑下(字尾有時間)
- 新的jar包釋出(拷貝)到應用服務的路徑下
- 關閉當前服務(kill process)
- 重新啟動服務jar服務
思路非常簡單,寫一個shell指令碼,3個param,分別是backpath(備份路徑)、deploypath(釋出路徑)、jarfile(jar包的名稱)。Deploy.sh指令碼如下
[[email protected] tmp]# ./Deploy.sh backpath deploypath demo.jar
#!/bin/bash <<COMMENT ./Deploy.sh [備份路徑引數_絕對路徑] [部署路徑引數_絕對路徑] [部署包包名] 執行該指令碼之前,預釋出的包需要上傳到備份路徑下 COMMENT BACKUP_PATH="$1" DEPLOY_PATH="$2" PACKAGE="$3" backup_time=`date "+%Y%m%d%H%M%S"` #加上--spring.profiles.active是為了避免grep到執行該shell的程序 process_id=`ps -ef | grep "${PACKAGE} --spring.profiles.active" | grep -v "grep" | awk '{print $2}'` #線上當前包備份 deployed_path=${DEPLOY_PATH}/${PACKAGE} if [ -f ${deployed_path} ]; then echo "mv ${deployed_path} ${BACKUP_PATH}/${PACKAGE}.${backup_time}" mv ${deployed_path}] ${BACKUP_PATH}/${PACKAGE}.${backup_time} else echo "${DEPLOY_PATH}下沒有需要備份的包" fi #預部署的包釋出到釋出路徑 package_path=${BACKUP_PATH}/${PACKAGE} if [ -f ${package_path} ]; then echo "mv ${BACKUP_PATH}/${PACKAGE} ${DEPLOY_PATH}/" mv ${BACKUP_PATH}/${PACKAGE} ${DEPLOY_PATH}/ echo ${process_id} #重啟服務 if [ -n ${process_id} ]; then echo "kill process ${PACKAGE}" kill ${process_id} >/dev/null 2>&1 sleep 3s again=`ps -ef | grep "${PACKAGE} --spring.profiles.active" | grep -v "grep" | awk '{print $2}'` if [ -z ${agin} ]; then echo "kill process ${PACKAGE} successed" echo "process ${PACKAGE} restart..." exec nohup java -jar ${DEPLOY_PATH}/${PACKAGE} --spring.profiles.active=prod > ${DEPLOY_PATH}/nohup.out 2>&1 & sleep 10s else echo "kill process failed, please contact the administrator" fi fi else echo "${BACKUP_PATH}下沒有可以釋出的新包" fi