脚本同步主备服务器的jar包,并自动docker发布

93 阅读1分钟

1. 主服务器发布脚本 deploy.sh

now=`date +%Y%m%d%H%M%S`

function send_mail() {
  curl -s --user 'api:YOUR_MAILGUN_APPKEY' \
        https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/messages \
        -F from='master@YOUR_DOMAIN_NAME' \
        -F to='YOUR_DOMAIN_NAME' \
        -F to='YOUR_DOMAIN_NAME' \
        -F subject='ecb.jar rsync '$1 \
        -F text='ecb.jar rsync '$1
}

echo ecb.jar rsync start…
rsync -av -e 'ssh' ecb.jar root@SERVER_IP:/root
if [ "$?" -eq "0" ]
   then
     echo ecb.jar rsync success!
     send_mail success
   else
     echo ecb.jar rysnc fail…
     send_mail fail
fi

echo building test_ecb instance...
docker build -t test_ecb_instance_$now .
echo built test_ecb instance done...

docker ps | grep test_ecb_instance | awk '{print $1}' | xargs --no-run-if-empty docker stop

docker run -it -v /root/sf_app/ecb/ecb_files:/app/attach_files -v /root/sf_app/ecb/ecb_security:/app/security -v /root/sf_app/ecb/ecb_logs:/app/logback_logs -v /root/sf_app/ecb/ecb_files/templates:/app/templates -p 0.0.0.0:9095:9095 -d test_ecb_instance_$now

2. 备用服务器发布脚本 deploy.sh




now=`date +%Y%m%d%H%M%S`

function send_mail() {
  curl -s --user 'api:YOUR_MAILGUN_APPKEY' \
        https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/messages \
        -F from='master@YOUR_DOMAIN_NAME' \
        -F to='YOUR_DOMAIN_NAME' \
        -F to='YOUR_DOMAIN_NAME' \
        -F subject='ecb backup deploy '$1 \
        -F text='ecb backup deploy '$1
}

echo building test_ecb instance...
docker build -t test_ecb_instance_$now .
echo built test_ecb instance done...

docker ps | grep test_ecb_instance | awk '{print $1}' | xargs --no-run-if-empty docker stop

docker run -it -v /root/sf_app/ecb/ecb_files:/app/attach_files -v /root/sf_app/ecb/ecb_security:/app/security -v /root/sf_app/ecb/ecb_logs:/app/logback_logs -v /root/sf_app/ecb/ecb_files/templates:/app/templates -p 0.0.0.0:9095:9095 -d test_ecb_instance_$now

if [ "$?" -eq "0" ]
   then
      echo deploy success!
      send_mail success
    else
      echo deploy fail!
      send_mail fail
fi

3.备用服务器DockerFile

FROM openjdk:8-jdk-alpine

VOLUME /tmp
EXPOSE 8080

COPY ecb.jar app.jar

# 给备用服务器一个单独的配置
ENTRYPOINT ["java","-Dspring.profiles.active=backup","-jar","/app.jar"]

4. 备用服务器定时检测脚本check_jar.sh

# !/bin/bash

jars=(ecb.jar asns.jar bb.jar)

function compareMD5() {
  cd /root

  master_jar_md5=`md5sum $1 | awk -F " " '{ print $1 }'`
  backup_jar_md5=`md5sum $2 | awk -F " " '{ print $1 }'`

  if [ $backup_jar_md5 == $master_jar_md5 ]
     then
        echo two jars are same!
        rm $1
     else
        echo refresh new jar!
        cp $2$3 $2$4
        mv $1 $2$3
        cd $2
        sh deploy.sh
  fi
}

for i in ${jars[*]}
do
   if [ -e '/root/'$i ]
     then
       case $i in
       ecb.jar)
          master_jar=/root/ecb.jar
          backup_jar_path=/root/sf_app/ecb/ecb_app/ecb_backend/

          compareMD5 $master_jar $backup_jar_path ecb.jar ecb_bak.jar
       ;;
       asns.jar)
          echo im asns
       ;;
       bb.jar)
          echo im bb
       ;;
       esac
     else
       echo $i 'not exist'
   fi
done

5. chmod +x check_jar.sh

6. crontab -e 添加 */5 * * * * /shell/check_jar.sh

7. vi /var/spool/mail/root 可以查看历史执行记录

8. 脚本同步数据库(全量)

# !/bin/bash
now=`date +%Y%m%d%H%M%S`

# mail_arr
dump_success=()
dump_fail=()
sync_success=()
sync_fail=()

cd /root/mysqldump

# new table add here!
tables=(ecb@t_inta_pay_pay_transaction ecb@t_inta_pay_refund_transaction)

for i in ${tables[*]}
do
    database=`echo $i | awk -F "@" '{ print $1 }'`
    table=`echo $i | awk -F "@" '{ print $2 }'`

    mysqldump $database $table > ${database}@${table}@${now}.sql

    if [ "$?" -eq "0" ]
    then
    	dump_success[${#dump_success[*]}]=$i
    else
    	dump_fail[${#dump_fail[*]}]=$i
    fi
done

for f in `ls`
do
    if [[ $f =~ $now ]]
    then
        database=`echo $f | awk -F "@" '{ print $1 }'`

        mysql -h -u -p $database < $f

        if [ "$?" -eq "0" ]
        then
        	sync_success[${#sync_success[*]}]=$i
        else
        	sync_fail[${#sync_fail[*]}]=$i
        fi
    fi
done

text="[need_sync] <br/>${tables[*]} <br/><br/>\
[dump_success] <br/>${dump_success[*]} <br/><br/>\
[dump_fail] <br/>${dump_fail[*]} <br/><br/>\
[sync_success] <br/>${sync_success[*]} <br/><br/>\
[sync_fail] <br/>${sync_fail[*]}"

curl -s --user 'api:YOUR_MAILGUN_APPKEY' \
      https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/messages \
      -F from='master@YOUR_DOMAIN_NAME' \
      -F to='YOUR_DOMAIN_NAME' \
      -F to='YOUR_DOMAIN_NAME' \
      -F subject="$now sync master backup data result" \
      -F html="$text"