backup.sh 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. #!/bin/bash
  2. # Author: yeho <lj2007331 AT gmail.com>
  3. # BLOG: https://blog.linuxeye.cn
  4. #
  5. # Notes: OneinStack for CentOS/RadHat 6+ Debian 7+ and Ubuntu 12+
  6. #
  7. # Project home page:
  8. # https://oneinstack.com
  9. # https://github.com/lj2007331/oneinstack
  10. # Check if user is root
  11. [ $(id -u) != "0" ] && { echo "${CFAILURE}Error: You must be root to run this script${CEND}"; exit 1; }
  12. oneinstack_dir=$(dirname "`readlink -f $0`")
  13. pushd ${oneinstack_dir}/tools > /dev/null
  14. . ../options.conf
  15. [ ! -e "${backup_dir}" ] && mkdir -p ${backup_dir}
  16. DB_Local_BK() {
  17. for D in `echo ${db_name} | tr ',' ' '`
  18. do
  19. ./db_bk.sh ${D}
  20. done
  21. }
  22. DB_Remote_BK() {
  23. for D in `echo ${db_name} | tr ',' ' '`
  24. do
  25. ./db_bk.sh ${D}
  26. DB_GREP="DB_${D}_`date +%Y%m%d`"
  27. DB_FILE=`ls -lrt ${backup_dir} | grep ${DB_GREP} | tail -1 | awk '{print $NF}'`
  28. echo "file:::${backup_dir}/${DB_FILE} ${backup_dir} push" >> config_backup.txt
  29. echo "com:::[ -e "${backup_dir}/${DB_FILE}" ] && rm -rf ${backup_dir}/DB_${D}_$(date +%Y%m%d --date="${expired_days} days ago")_*.tgz" >> config_backup.txt
  30. done
  31. }
  32. DB_OSS_BK() {
  33. for D in `echo ${db_name} | tr ',' ' '`
  34. do
  35. ./db_bk.sh ${D}
  36. DB_GREP="DB_${D}_`date +%Y%m%d`"
  37. DB_FILE=`ls -lrt ${backup_dir} | grep ${DB_GREP} | tail -1 | awk '{print $NF}'`
  38. /usr/local/bin/ossutil cp -f ${backup_dir}/${DB_FILE} oss://${oss_bucket}/`date +%F`/${DB_FILE}
  39. [ $? -eq 0 ] && /usr/local/bin/ossutil rm -rf oss://${oss_bucket}/`date +%F --date="${expired_days} days ago"`/
  40. done
  41. }
  42. DB_COS_BK() {
  43. for D in `echo ${db_name} | tr ',' ' '`
  44. do
  45. ./db_bk.sh ${D}
  46. DB_GREP="DB_${D}_`date +%Y%m%d`"
  47. DB_FILE=`ls -lrt ${backup_dir} | grep ${DB_GREP} | tail -1 | awk '{print $NF}'`
  48. ${python_install_dir}/bin/coscmd upload ${backup_dir}/${DB_FILE} /`date +%F`/${DB_FILE}
  49. [ $? -eq 0 ] && ${python_install_dir}/bin/coscmd delete -r -f `date +%F --date="${expired_days} days ago"` > /dev/null 2>&1
  50. done
  51. }
  52. DB_UPYUN_BK() {
  53. for D in `echo ${db_name} | tr ',' ' '`
  54. do
  55. ./db_bk.sh ${D}
  56. DB_GREP="DB_${D}_`date +%Y%m%d`"
  57. DB_FILE=`ls -lrt ${backup_dir} | grep ${DB_GREP} | tail -1 | awk '{print $NF}'`
  58. /usr/local/bin/upx put ${backup_dir}/${DB_FILE} /`date +%F`/${DB_FILE}
  59. [ $? -eq 0 ] && /usr/local/bin/upx rm -a `date +%F --date="${expired_days} days ago"` > /dev/null 2>&1
  60. done
  61. }
  62. DB_QINIU_BK() {
  63. for D in `echo ${db_name} | tr ',' ' '`
  64. do
  65. ./db_bk.sh ${D}
  66. DB_GREP="DB_${D}_`date +%Y%m%d`"
  67. DB_FILE=`ls -lrt ${backup_dir} | grep ${DB_GREP} | tail -1 | awk '{print $NF}'`
  68. /usr/local/bin/qshell rput ${qiniu_bucket} /`date +%F`/${DB_FILE} ${backup_dir}/${DB_FILE}
  69. if [ $? -eq 0 ]; then
  70. /usr/local/bin/qshell listbucket ${qiniu_bucket} /`date +%F --date="${expired_days} days ago"` /tmp/qiniu.txt > /dev/null 2>&1
  71. /usr/local/bin/qshell batchdelete -force ${qiniu_bucket} /tmp/qiniu.txt > /dev/null 2>&1
  72. rm -f /tmp/qiniu.txt
  73. fi
  74. done
  75. }
  76. WEB_Local_BK() {
  77. for W in `echo ${website_name} | tr ',' ' '`
  78. do
  79. ./website_bk.sh $W
  80. done
  81. }
  82. WEB_Remote_BK() {
  83. for W in `echo ${website_name} | tr ',' ' '`
  84. do
  85. if [ `du -sm "${wwwroot_dir}/$WebSite" | awk '{print $1}'` -lt 1024 ]; then
  86. ./website_bk.sh $W
  87. Web_GREP="Web_${W}_`date +%Y%m%d`"
  88. Web_FILE=`ls -lrt ${backup_dir} | grep ${Web_GREP} | tail -1 | awk '{print $NF}'`
  89. echo "file:::${backup_dir}/$Web_FILE ${backup_dir} push" >> config_backup.txt
  90. echo "com:::[ -e "${backup_dir}/$Web_FILE" ] && rm -rf ${backup_dir}/Web_${W}_$(date +%Y%m%d --date="${expired_days} days ago")_*.tgz" >> config_backup.txt
  91. else
  92. echo "file:::${wwwroot_dir}/$W ${backup_dir} push" >> config_backup.txt
  93. fi
  94. done
  95. }
  96. WEB_OSS_BK() {
  97. for W in `echo $website_name | tr ',' ' '`
  98. do
  99. [ ! -e "${wwwroot_dir}/$WebSite" ] && { echo "[${wwwroot_dir}/$WebSite] not exist"; break; }
  100. PUSH_FILE="${backup_dir}/Web_${W}_$(date +%Y%m%d_%H).tgz"
  101. if [ ! -e "${PUSH_FILE}" ]; then
  102. pushd ${wwwroot_dir} > /dev/null
  103. tar czf ${PUSH_FILE} ./$W
  104. popd > /dev/null
  105. fi
  106. /usr/local/bin/ossutil cp -f ${PUSH_FILE} oss://${oss_bucket}/`date +%F`/${PUSH_FILE##*/}
  107. [ $? -eq 0 ] && { [ -e "${PUSH_FILE}" ] && rm -rf ${PUSH_FILE}; /usr/local/bin/ossutil rm -rf oss://${oss_bucket}/`date +%F --date="${expired_days} days ago"`/; }
  108. done
  109. }
  110. WEB_COS_BK() {
  111. for W in `echo ${website_name} | tr ',' ' '`
  112. do
  113. [ ! -e "${wwwroot_dir}/$WebSite" ] && { echo "[${wwwroot_dir}/$WebSite] not exist"; break; }
  114. PUSH_FILE="${backup_dir}/Web_${W}_$(date +%Y%m%d_%H).tgz"
  115. if [ ! -e "${PUSH_FILE}" ]; then
  116. pushd ${wwwroot_dir} > /dev/null
  117. tar czf ${PUSH_FILE} ./$W
  118. popd > /dev/null
  119. fi
  120. ${python_install_dir}/bin/coscmd upload ${PUSH_FILE} /`date +%F`/${PUSH_FILE##*/}
  121. if [ $? -eq 0 ]; then
  122. ${python_install_dir}/bin/coscmd delete -r -f `date +%F --date="${expired_days} days ago"` > /dev/null 2>&1
  123. [ -e "${PUSH_FILE}" -a -z "`echo ${backup_destination} | grep -ow 'local'`" ] && rm -rf ${PUSH_FILE}
  124. fi
  125. done
  126. }
  127. WEB_UPYUN_BK() {
  128. for W in `echo ${website_name} | tr ',' ' '`
  129. do
  130. [ ! -e "${wwwroot_dir}/$WebSite" ] && { echo "[${wwwroot_dir}/$WebSite] not exist"; break; }
  131. [ ! -e "${backup_dir}" ] && mkdir -p ${backup_dir}
  132. PUSH_FILE="${backup_dir}/Web_${W}_$(date +%Y%m%d_%H).tgz"
  133. if [ ! -e "${PUSH_FILE}" ]; then
  134. pushd ${wwwroot_dir} > /dev/null
  135. tar czf ${PUSH_FILE} ./$W
  136. popd > /dev/null
  137. fi
  138. /usr/local/bin/upx put ${PUSH_FILE} /`date +%F`/${PUSH_FILE##*/}
  139. if [ $? -eq 0 ]; then
  140. /usr/local/bin/upx rm -a `date +%F --date="${expired_days} days ago"` > /dev/null 2>&1
  141. [ -e "${PUSH_FILE}" -a -z "`echo ${backup_destination} | grep -ow 'local'`" ] && rm -rf ${PUSH_FILE}
  142. fi
  143. done
  144. }
  145. WEB_QINIU_BK() {
  146. for W in `echo ${website_name} | tr ',' ' '`
  147. do
  148. [ ! -e "${wwwroot_dir}/$WebSite" ] && { echo "[${wwwroot_dir}/$WebSite] not exist"; break; }
  149. [ ! -e "${backup_dir}" ] && mkdir -p ${backup_dir}
  150. PUSH_FILE="${backup_dir}/Web_${W}_$(date +%Y%m%d_%H).tgz"
  151. if [ ! -e "${PUSH_FILE}" ]; then
  152. pushd ${wwwroot_dir} > /dev/null
  153. tar czf ${PUSH_FILE} ./$W
  154. popd > /dev/null
  155. fi
  156. /usr/local/bin/qshell rput ${qiniu_bucket} /`date +%F`/${PUSH_FILE##*/} ${PUSH_FILE}
  157. if [ $? -eq 0 ]; then
  158. /usr/local/bin/qshell listbucket ${qiniu_bucket} /`date +%F --date="${expired_days} days ago"` /tmp/qiniu.txt > /dev/null 2>&1
  159. /usr/local/bin/qshell batchdelete -force ${qiniu_bucket} /tmp/qiniu.txt > /dev/null 2>&1
  160. rm -f /tmp/qiniu.txt
  161. fi
  162. done
  163. }
  164. for DEST in `echo ${backup_destination} | tr ',' ' '`
  165. do
  166. if [ "${DEST}" == 'local' ]; then
  167. [ -n "`echo ${backup_content} | grep -ow db`" ] && DB_Local_BK
  168. [ -n "`echo ${backup_content} | grep -ow web`" ] && WEB_Local_BK
  169. fi
  170. if [ "${DEST}" == 'remote' ]; then
  171. echo "com:::[ ! -e "${backup_dir}" ] && mkdir -p ${backup_dir}" > config_backup.txt
  172. [ -n "`echo ${backup_content} | grep -ow db`" ] && DB_Remote_BK
  173. [ -n "`echo ${backup_content} | grep -ow web`" ] && WEB_Remote_BK
  174. ./mabs.sh -c config_backup.txt -T -1 | tee -a mabs.log
  175. fi
  176. if [ "${DEST}" == 'oss' ]; then
  177. [ -n "`echo ${backup_content} | grep -ow db`" ] && DB_OSS_BK
  178. [ -n "`echo ${backup_content} | grep -ow web`" ] && WEB_OSS_BK
  179. fi
  180. if [ "${DEST}" == 'cos' ]; then
  181. [ -n "`echo ${backup_content} | grep -ow db`" ] && DB_COS_BK
  182. [ -n "`echo ${backup_content} | grep -ow web`" ] && WEB_COS_BK
  183. fi
  184. if [ "${DEST}" == 'upyun' ]; then
  185. [ -n "`echo ${backup_content} | grep -ow db`" ] && DB_UPYUN_BK
  186. [ -n "`echo ${backup_content} | grep -ow web`" ] && WEB_UPYUN_BK
  187. fi
  188. if [ "${DEST}" == 'qiniu' ]; then
  189. [ -n "`echo ${backup_content} | grep -ow db`" ] && DB_QINIU_BK
  190. [ -n "`echo ${backup_content} | grep -ow web`" ] && WEB_QINIU_BK
  191. fi
  192. done