#!/bin/bash # 目标路径 BASE_PATH=/usr/local/gateway BACKUP_PATH=/usr/local/gateway_backup TMP_PATH=/usr/local/tmp function backup(){ if [ -d $BASE_PATH ]; then if [ ! -d $BACKUP_PATH ]; then mkdir -p $BACKUP_PATH fi cp -rf $BASE_PATH/* $BACKUP_PATH/ fi } function rollback(){ if [ -d $BASE_PATH ]; then if [ -d $BACKUP_PATH ]; then rm -rf $BASE_PATH/* cp -rf $BACKUP_PATH/* $BASE_PATH/ fi fi } function upgrade(){ if [ ! -d $BASE_PATH ]; then mkdir -p $BASE_PATH fi mkdir -p $TMP_PATH unzip -d $TMP_PATH $1 > /dev/null 2>&1 if [ 0 -ne $? ];then echo "解压失败">&2 return 1 fi rsync -av --progress $TMP_PATH/gateway/* $BASE_PATH/ --exclude bin --exclude include --exclude lib --exclude lib64 --exclude runtime --exclude share --exclude src/config.toml > /dev/null 2>&1 if [ 0 -ne $? ];then echo "复制文件失败">&2 return 2 fi return 0 } function clean(){ rm -rf $BACKUP_PATH/ rm -rf $TMP_PATH/ rm -rf $1 } function service_ok(){ systemctl status gateway > /dev/null 2>&1 if [ 0 -eq $? ] then return 0 else return 1 fi } function stop(){ service_ok if [ 0 -eq $? ]; then systemctl stop gateway > /dev/null 2>&1 fi } function start(){ stop cnt=0 while [ 0 -eq 0 ] do systemctl start gateway > /dev/null 2>&1 sleep 1 service_ok if [ 0 -eq $? ]; then return 0 else cnt=$[${cnt}+1] if [ ${cnt} -eq 3 ]; then return 1 fi fi done } if [ -n "$1" ];then stop backup upgrade $1 if [ 1 -eq $? ];then rollback start clean $1 exit 1 elif [ 2 -eq $? ];then rollback start clean $1 exit 1 fi start if [ 0 -eq $? ];then clean $1 exit 0 else rollback start echo "服务无法启动,升级失败,回滚到上一版本">&2 clean $1 exit 1 fi else echo "没有升级包路径">&2 fi