Procházet zdrojové kódy

Add Google Drive backup and Fix backup_setup.sh

lj2007331@gmail.com před 6 roky
rodič
revize
8872c977f4
2 změnil soubory, kde provedl 76 přidání a 17 odebrání
  1. 44 3
      backup.sh
  2. 32 14
      backup_setup.sh

+ 44 - 3
backup.sh

@@ -82,6 +82,22 @@ DB_QINIU_BK() {
   done
 }
 
+DB_GDRIVE_BK() {
+  for D in `echo ${db_name} | tr ',' ' '`
+  do
+    ./db_bk.sh ${D}
+    DB_GREP="DB_${D}_`date +%Y%m%d`"
+    DB_FILE=`ls -lrt ${backup_dir} | grep ${DB_GREP} | tail -1 | awk '{print $NF}'`
+    Parent_id=$(/usr/local/bin/gdrive list --no-header -q "name = '`date +%F`'" | awk '{print $1}')
+    [ -z ${Parent_id} ] && Parent_id=$(/usr/local/bin/gdrive mkdir `date +%F` | awk '{print $2}')
+    /usr/local/bin/gdrive upload -p ${Parent_id} ${backup_dir}/${DB_FILE}
+    if [ $? -eq 0 ]; then
+      Parent_id=$(/usr/local/bin/gdrive list --no-header -q "name = '`date +%F --date="${expired_days} days ago"`'" | awk '{print $1}')
+      [ -n ${Parent_id} ] && /usr/local/bin/gdrive delete -r -p ${Parent_id} > /dev/null 2>&1
+    fi
+  done
+}
+
 WEB_Local_BK() {
   for W in `echo ${website_name} | tr ',' ' '`
   do
@@ -167,7 +183,7 @@ WEB_QINIU_BK() {
       tar czf ${PUSH_FILE} ./$W
       popd > /dev/null
     fi
-    /usr/local/bin/qshell rput ${qiniu_bucket} /`date +%F`/${PUSH_FILE##*/} ${PUSH_FILE} 
+    /usr/local/bin/qshell rput ${qiniu_bucket} /`date +%F`/${PUSH_FILE##*/} ${PUSH_FILE}
     if [ $? -eq 0 ]; then
       /usr/local/bin/qshell listbucket ${qiniu_bucket} /`date +%F --date="${expired_days} days ago"` /tmp/qiniu.txt > /dev/null 2>&1
       /usr/local/bin/qshell batchdelete -force ${qiniu_bucket} /tmp/qiniu.txt > /dev/null 2>&1
@@ -176,6 +192,27 @@ WEB_QINIU_BK() {
   done
 }
 
+WEB_GDRIVE_BK() {
+  for W in `echo ${website_name} | tr ',' ' '`
+  do
+    [ ! -e "${wwwroot_dir}/$WebSite" ] && { echo "[${wwwroot_dir}/$WebSite] not exist"; break; }
+    [ ! -e "${backup_dir}" ] && mkdir -p ${backup_dir}
+    PUSH_FILE="${backup_dir}/Web_${W}_$(date +%Y%m%d_%H).tgz"
+    if [ ! -e "${PUSH_FILE}" ]; then
+      pushd ${wwwroot_dir} > /dev/null
+      tar czf ${PUSH_FILE} ./$W
+      popd > /dev/null
+    fi
+    Parent_id=$(/usr/local/bin/gdrive list --no-header -q "name = '`date +%F`'" | awk '{print $1}')
+    [ -z ${Parent_id} ] && Parent_id=$(/usr/local/bin/gdrive mkdir `date +%F` | awk '{print $2}')
+    /usr/local/bin/gdrive upload -p ${Parent_id} ${PUSH_FILE}
+    if [ $? -eq 0 ]; then
+      Parent_id=$(/usr/local/bin/gdrive list --no-header -q "name = '`date +%F --date="${expired_days} days ago"`'" | awk '{print $1}')
+      [ -n ${Parent_id} ] && /usr/local/bin/gdrive delete -r -p ${Parent_id} > /dev/null 2>&1
+    fi
+  done
+}
+
 for DEST in `echo ${backup_destination} | tr ',' ' '`
 do
   if [ "${DEST}" == 'local' ]; then
@@ -201,7 +238,11 @@ do
     [ -n "`echo ${backup_content} | grep -ow web`" ] && WEB_UPYUN_BK
   fi
   if [ "${DEST}" == 'qiniu' ]; then
-    [ -n "`echo ${backup_content} | grep -ow db`" ] && DB_QINIU_BK 
-    [ -n "`echo ${backup_content} | grep -ow web`" ] && WEB_QINIU_BK 
+    [ -n "`echo ${backup_content} | grep -ow db`" ] && DB_QINIU_BK
+    [ -n "`echo ${backup_content} | grep -ow web`" ] && WEB_QINIU_BK
+  fi
+  if [ "${DEST}" == 'gdrive' ]; then
+    [ -n "`echo ${backup_content} | grep -ow db`" ] && WEB_GDRIVE_BK
+    [ -n "`echo ${backup_content} | grep -ow web`" ] && WEB_GDRIVE_BK
   fi
 done

+ 32 - 14
backup_setup.sh

@@ -38,10 +38,11 @@ while :; do echo
   echo -e "\t${CMSG}4${CEND}. Qcloud COS"
   echo -e "\t${CMSG}5${CEND}. UPYUN"
   echo -e "\t${CMSG}6${CEND}. QINIU"
+  echo -e "\t${CMSG}7${CEND}. Google Drive"
   read -e -p "Please input numbers:(Default 1 press Enter) " desc_bk
   desc_bk=${desc_bk:-'1'}
   array_desc=(${desc_bk})
-  array_all=(1 2 3 4 5 6)
+  array_all=(1 2 3 4 5 6 7)
   for v in ${array_desc[@]}
   do
     [ -z "`echo ${array_all[@]} | grep -w ${v}`" ] && desc_flag=1
@@ -51,17 +52,18 @@ while :; do echo
     echo; echo "${CWARNING}input error! Please only input number 1 3 4 and so on${CEND}"; echo
     continue
   else
+    sed -i 's@^backup_destination=.*@backup_destination=@' ./options.conf
     break
   fi
 done
 
-sed -i 's@^backup_destination=.*@backup_destination=@' ./options.conf
-[ -n `echo ${desc_bk} | grep -w 1` ] && sed -i 's@^backup_destination=.*@backup_destination=local@' ./options.conf
-[ -n `echo ${desc_bk} | grep -w 2` ] && sed -i 's@^backup_destination=.*@&,remote@' ./options.conf
-[ -n `echo ${desc_bk} | grep -w 3` ] && sed -i 's@^backup_destination=.*@&,oss@' ./options.conf
-[ -n `echo ${desc_bk} | grep -w 4` ] && sed -i 's@^backup_destination=.*@&,cos@' ./options.conf
-[ -n `echo ${desc_bk} | grep -w 5` ] && sed -i 's@^backup_destination=.*@&,upyun@' ./options.conf
-[ -n `echo ${desc_bk} | grep -w 6` ] && sed -i 's@^backup_destination=.*@&,qiniu@' ./options.conf
+[ -n "`echo ${desc_bk} | grep -w 1`" ] && sed -i 's@^backup_destination=.*@backup_destination=local@' ./options.conf
+[ -n "`echo ${desc_bk} | grep -w 2`" ] && sed -i 's@^backup_destination=.*@&,remote@' ./options.conf
+[ -n "`echo ${desc_bk} | grep -w 3`" ] && sed -i 's@^backup_destination=.*@&,oss@' ./options.conf
+[ -n "`echo ${desc_bk} | grep -w 4`" ] && sed -i 's@^backup_destination=.*@&,cos@' ./options.conf
+[ -n "`echo ${desc_bk} | grep -w 5`" ] && sed -i 's@^backup_destination=.*@&,upyun@' ./options.conf
+[ -n "`echo ${desc_bk} | grep -w 6`" ] && sed -i 's@^backup_destination=.*@&,qiniu@' ./options.conf
+[ -n "`echo ${desc_bk} | grep -w 7`" ] && sed -i 's@^backup_destination=.*@&,gdrive@' ./options.conf
 sed -i 's@^backup_destination=,@backup_destination=@' ./options.conf
 
 while :; do echo
@@ -82,7 +84,7 @@ done
 [ "${content_bk}" == '2' ] && sed -i 's@^backup_content=.*@backup_content=web@' ./options.conf
 [ "${content_bk}" == '3' ] && sed -i 's@^backup_content=.*@backup_content=db,web@' ./options.conf
 
-if [[ ${desc_bk} =~ ^[1,2]$ ]]; then
+if [ -n "`echo ${desc_bk} | grep -Ew '1|2'`" ]; then
   while :; do echo
     echo "Please enter the directory for save the backup file: "
     read -e -p "(Default directory: ${backup_dir}): " new_backup_dir
@@ -143,7 +145,7 @@ echo "You have to backup the content:"
 [ "${content_bk}" != '2' ] && echo "Database: ${CMSG}${db_name}${CEND}"
 [ "${content_bk}" != '1' ] && echo "Website: ${CMSG}${website_name}${CEND}"
 
-if [ -n `echo ${desc_bk} | grep -w 2` ]; then
+if [ -n "`echo ${desc_bk} | grep -w 2`" ]; then
   > tools/iplist.txt
   while :; do echo
     read -e -p "Please enter the remote host ip: " remote_ip
@@ -176,7 +178,7 @@ if [ -n `echo ${desc_bk} | grep -w 2` ]; then
   done
 fi
 
-if [ -n `echo ${desc_bk} | grep -w 3` ]; then
+if [ -n "`echo ${desc_bk} | grep -w 3`" ]; then
   if [ ! -e "/usr/local/bin/ossutil" ]; then
     wget -qc http://gosspublic.alicdn.com/ossutil/1.4.2/ossutil${OS_BIT} -O /usr/local/bin/ossutil
     chmod +x /usr/local/bin/ossutil
@@ -239,7 +241,7 @@ if [ -n `echo ${desc_bk} | grep -w 3` ]; then
   done
 fi
 
-if [ -n `echo ${desc_bk} | grep -w 4` ]; then
+if [ -n "`echo ${desc_bk} | grep -w 4`" ]; then
   Install_Python
   [ ! -e "${python_install_dir}/lib/coscmd" ] && ${python_install_dir}/bin/pip install coscmd >/dev/null 2>&1
   while :; do echo
@@ -316,7 +318,7 @@ if [ -n `echo ${desc_bk} | grep -w 4` ]; then
   done
 fi
 
-if [ -n `echo ${desc_bk} | grep -w 5` ]; then
+if [ -n "`echo ${desc_bk} | grep -w 5`" ]; then
   if [ ! -e "/usr/local/bin/upx" ]; then
     if [ "${OS_BIT}" == '64' ]; then
       wget -qc http://collection.b0.upaiyun.com/softwares/upx/upx-linux-amd64-v0.2.3 -O /usr/local/bin/upx
@@ -346,7 +348,7 @@ if [ -n `echo ${desc_bk} | grep -w 5` ]; then
   done
 fi
 
-if [ -n `echo ${desc_bk} | grep -w 6` ]; then
+if [ -n "`echo ${desc_bk} | grep -w 6`" ]; then
   if [ ! -e "/usr/local/bin/qrsctl" ]; then
     if [ "${OS_BIT}" == '64' ]; then
       wget -qc http://devtools.qiniu.com/linux/amd64/qrsctl -O /usr/local/bin/qrsctl
@@ -413,3 +415,19 @@ if [ -n `echo ${desc_bk} | grep -w 6` ]; then
     fi
   done
 fi
+
+if [ -n "`echo ${desc_bk} | grep -w 7`" ]; then
+  if [ ! -e "/usr/local/bin/gdrive" ]; then
+    if [ "${OS_BIT}" == '64' ]; then
+      wget -qc http://mirrors.linuxeye.com/oneinstack/src/gdrive-linux-x64 -O /usr/local/bin/gdrive
+    elif [ "${OS_BIT}" == '32' ]; then
+      wget -qc http://mirrors.linuxeye.com/oneinstack/src/gdrive-linux-386 -O /usr/local/bin/gdrive
+    fi
+    chmod +x /usr/local/bin/gdrive
+  fi
+  while :; do echo
+    if gdrive about; then
+      break
+    fi
+  done
+fi