projects=("svc-manager" "admin" "sms" "log-monitor")
# 列出projects中的所有值給用戶選擇,選擇結果存放在project變量中。PS3是系統提示語,默認值是"#?"
PS3="請選擇一個項目:"
select project in ${projects[*]};do
if [ $project ];then
break
fi
done
declare -A projects=(["registry"]="註冊中心" ["user-service"]="用戶服務")
PS3="請選擇一個項目:"
select project in ${!projects[*]} "Exit(退出)";do
if [ "$project" = "Exit(退出)" ]; then
echo "謝謝使用!Good-Bye!"
exit
fi
if [ $project ];then
break
fi
done
project_name=${projects[$project]}
select file in ${backup_dir}/${project}/* ;do
echo $file
done
LOCKFILE="/opt/shell/spring-boot-deploy-git.lock"
#用 trap 命令設置一個對信號的監聽器
#程序運行中當監聽到信號 1,2,3,9,15 20就會刪除鎖文件,並退出腳本執行
#比如說,當腳本自行運行結束、被用戶 Ctrl+C 掉、被 Kill 掉、終端被關閉
#系統關機或重啓的情況下,都需將臨時文件刪除,否則腳本以後都沒機會執行
#運行 trap -l 查看到所以信號
trap 'echo "\n解鎖成功。";rm -f ${LOCKFILE}; exit' 1 2 3 9 15 20
if [ -f $LOCKFILE ]; then
echo "另外一個人正在部署,請稍後再試!"
echo "如果發生了異常,請清除鎖文件後再試:rm -f ${LOCKFILE}"
exit 0
fi
touch $LOCKFILE #touch新建一個鎖文件
chmod 600 $LOCKFILE #把文件屬性改爲只建立者可讀寫
echo 謝謝使用!
rm -f ${LOCKFILE}
exit
echo 開始從git服務器的master分支中pull代碼...
git pull
while [ ! $? -eq 0 ];do#“$?”是上個命令的返回值,正常的話值是“0”
echo "git pull 發生錯誤,自動重試……"
git pull
done;
today=$(date +%Y-%m-%d-%H-%M-%S)
echo $today
log_info="$(date +%Y-%m-%d/%H:%M:%S)\tgitVersion:$git_version\t$project_name($project)\tserver:"
echo -e $log_info
echo -e $log_info >> /opt/web/maven/$deploy_log_file
log_info=${log_info::-1}
list=${list%","}
/usr/bin/ssh -l root -p $ssh_port $target_ip "systemctl restart ${project}.service"
# rsync方式:
/usr/bin/rsync -avzuP -e "ssh -p $ssh_port" target/$project.jar $target_ip:$spring_boot_dir/
# scp方式:
/usr/bin/scp -P $ssh_port $file $target_ip:$spring_boot_dir/$project.jar
need_backup=true
if [ "$need_backup" == true ];then
# do sth...
fi
read -s -n1 -p "按任意鍵繼續……"
# 提示輸入“y/n”,結果保存到變量needbackup中:
while [[ ! $needbackup =~ ^[yn]$ ]];do
read -e -p "是否備份:(y/n)?" -i "y" needbackup
done
# 或:
while [ "$confirm" != "y" ] && [ "$confirm" != "n" ] ;do
read -e -p "以上信息是否正確?(y/n)?" -i "y" confirm
done
seconds_left=10
echo "倒計時${seconds_left}秒開始……"
while [ $seconds_left -gt 0 ];do
echo -n $seconds_left
sleep 1
seconds_left=$(($seconds_left - 1)) #變量減一
echo -ne "\r \r" #清除本行文字
# do some other thing,比如等待某個進程退出結束...
done
pid=`netstat -nlp | grep $port | awk '{print $7}' | awk -F "/" '{print $1}'`
echo $pid
process_keywords="/opt/app/tomcat/bin"
for pid in `ps -ef|grep $process_keywords|grep -v 'grep'|awk '{print $2}'`
do
echo $pid
done
rm -f $2/logs/*.log &>/dev/null &
gzip * &>/dev/null &
/bin/sh $2/bin/startup.sh &>/dev/null &
echo -n "請耐心等待tomcat完全啓動……"
while [ ! "$started" ];do
sleep 1
# 根據log中是否出現"Server startup in [0-9]* ms"關鍵字來判斷:
started=$(grep "Server startup in [0-9]* ms" $2/logs/catalina.out)
echo -n "…"
done
echo "tomcat已經完全啓動。"