1
0

backup.sh 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. #!/bin/bash
  2. # Author: yeho <lj2007331 AT gmail.com>
  3. # BLOG: https://blog.linuxeye.cn
  4. #
  5. # Notes: OneinStack for CentOS/RedHat 6+ Debian 7+ and Ubuntu 12+
  6. #
  7. # Project home page:
  8. # https://oneinstack.com
  9. # https://github.com/oneinstack/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. DB_S3_BK() {
  77. for D in `echo ${db_name} | tr ',' ' '`
  78. do
  79. ./db_bk.sh ${D}
  80. DB_GREP="DB_${D}_`date +%Y%m%d`"
  81. DB_FILE=`ls -lrt ${backup_dir} | grep ${DB_GREP} | tail -1 | awk '{print $NF}'`
  82. ${python_install_dir}/bin/s3cmd put ${backup_dir}/${DB_FILE} s3://${s3_bucket}/`date +%F`/${DB_FILE}
  83. [ $? -eq 0 ] && ${python_install_dir}/bin/s3cmd rm -r s3://${s3_bucket}/`date +%F --date="${expired_days} days ago"` > /dev/null 2>&1
  84. done
  85. }
  86. DB_GDRIVE_BK() {
  87. # get the IP information
  88. IPADDR=$(../include/get_ipaddr.py)
  89. IPADDR=${IPADDR:-127.0.0.1}
  90. Parent_root_id=$(/usr/local/bin/gdrive list --no-header -q "trashed = false and name = '${IPADDR}'" | awk '{print $1}')
  91. [ -z "${Parent_root_id}" ] && Parent_root_id=$(/usr/local/bin/gdrive mkdir ${IPADDR} | awk '{print $2}')
  92. Parent_sub_id=$(/usr/local/bin/gdrive list --no-header -q "'${Parent_root_id}' in parents and trashed = false and name = '`date +%F`'" | awk '{print $1}')
  93. [ -z "${Parent_sub_id}" ] && Parent_sub_id=$(/usr/local/bin/gdrive mkdir -p ${Parent_root_id} `date +%F` | awk '{print $2}')
  94. for D in `echo ${db_name} | tr ',' ' '`
  95. do
  96. ./db_bk.sh ${D}
  97. DB_GREP="DB_${D}_`date +%Y%m%d`"
  98. DB_FILE=`ls -lrt ${backup_dir} | grep ${DB_GREP} | tail -1 | awk '{print $NF}'`
  99. /usr/local/bin/gdrive upload -p ${Parent_sub_id} ${backup_dir}/${DB_FILE}
  100. if [ $? -eq 0 ]; then
  101. Parent_expired_id=$(/usr/local/bin/gdrive list --no-header -q "'${Parent_root_id}' in parents and trashed = false and name = '`date +%F --date="${expired_days} days ago"`'" | awk '{print $1}')
  102. [ -n "${Parent_expired_id}" ] && /usr/local/bin/gdrive delete -r ${Parent_expired_id} > /dev/null 2>&1
  103. fi
  104. done
  105. }
  106. DB_DROPBOX_BK() {
  107. for D in `echo ${db_name} | tr ',' ' '`
  108. do
  109. ./db_bk.sh ${D}
  110. DB_GREP="DB_${D}_`date +%Y%m%d`"
  111. DB_FILE=`ls -lrt ${backup_dir} | grep ${DB_GREP} | tail -1 | awk '{print $NF}'`
  112. /usr/local/bin/dbxcli put ${backup_dir}/${DB_FILE} `date +%F`/${DB_FILE}
  113. [ $? -eq 0 ] && /usr/local/bin/dbxcli rm -f `date +%F --date="${expired_days} days ago"` > /dev/null 2>&1
  114. done
  115. }
  116. WEB_LOCAL_BK() {
  117. for W in `echo ${website_name} | tr ',' ' '`
  118. do
  119. ./website_bk.sh $W
  120. done
  121. }
  122. WEB_Remote_BK() {
  123. for W in `echo ${website_name} | tr ',' ' '`
  124. do
  125. if [ `du -sm "${wwwroot_dir}/${WebSite}" | awk '{print $1}'` -lt 2048 ]; then
  126. ./website_bk.sh $W
  127. Web_GREP="Web_${W}_`date +%Y%m%d`"
  128. Web_FILE=`ls -lrt ${backup_dir} | grep ${Web_GREP} | tail -1 | awk '{print $NF}'`
  129. echo "file:::${backup_dir}/${Web_FILE} ${backup_dir} push" >> config_backup.txt
  130. 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
  131. else
  132. echo "file:::${wwwroot_dir}/$W ${backup_dir} push" >> config_backup.txt
  133. fi
  134. done
  135. }
  136. WEB_OSS_BK() {
  137. for W in `echo $website_name | tr ',' ' '`
  138. do
  139. [ ! -e "${wwwroot_dir}/${WebSite}" ] && { echo "[${wwwroot_dir}/${WebSite}] not exist"; break; }
  140. PUSH_FILE="${backup_dir}/Web_${W}_$(date +%Y%m%d_%H).tgz"
  141. if [ ! -e "${PUSH_FILE}" ]; then
  142. pushd ${wwwroot_dir} > /dev/null
  143. tar czf ${PUSH_FILE} ./$W
  144. popd > /dev/null
  145. fi
  146. /usr/local/bin/ossutil cp -f ${PUSH_FILE} oss://${oss_bucket}/`date +%F`/${PUSH_FILE##*/}
  147. [ $? -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"`/; }
  148. done
  149. }
  150. WEB_COS_BK() {
  151. for W in `echo ${website_name} | tr ',' ' '`
  152. do
  153. [ ! -e "${wwwroot_dir}/${WebSite}" ] && { echo "[${wwwroot_dir}/${WebSite}] not exist"; break; }
  154. PUSH_FILE="${backup_dir}/Web_${W}_$(date +%Y%m%d_%H).tgz"
  155. if [ ! -e "${PUSH_FILE}" ]; then
  156. pushd ${wwwroot_dir} > /dev/null
  157. tar czf ${PUSH_FILE} ./$W
  158. popd > /dev/null
  159. fi
  160. ${python_install_dir}/bin/coscmd upload ${PUSH_FILE} /`date +%F`/${PUSH_FILE##*/}
  161. if [ $? -eq 0 ]; then
  162. ${python_install_dir}/bin/coscmd delete -r -f `date +%F --date="${expired_days} days ago"` > /dev/null 2>&1
  163. [ -e "${PUSH_FILE}" -a -z "`echo ${backup_destination} | grep -ow 'local'`" ] && rm -rf ${PUSH_FILE}
  164. fi
  165. done
  166. }
  167. WEB_UPYUN_BK() {
  168. for W in `echo ${website_name} | tr ',' ' '`
  169. do
  170. [ ! -e "${wwwroot_dir}/${WebSite}" ] && { echo "[${wwwroot_dir}/${WebSite}] not exist"; break; }
  171. [ ! -e "${backup_dir}" ] && mkdir -p ${backup_dir}
  172. PUSH_FILE="${backup_dir}/Web_${W}_$(date +%Y%m%d_%H).tgz"
  173. if [ ! -e "${PUSH_FILE}" ]; then
  174. pushd ${wwwroot_dir} > /dev/null
  175. tar czf ${PUSH_FILE} ./$W
  176. popd > /dev/null
  177. fi
  178. /usr/local/bin/upx put ${PUSH_FILE} /`date +%F`/${PUSH_FILE##*/}
  179. if [ $? -eq 0 ]; then
  180. /usr/local/bin/upx rm -a `date +%F --date="${expired_days} days ago"` > /dev/null 2>&1
  181. [ -e "${PUSH_FILE}" -a -z "`echo ${backup_destination} | grep -ow 'local'`" ] && rm -rf ${PUSH_FILE}
  182. fi
  183. done
  184. }
  185. WEB_QINIU_BK() {
  186. for W in `echo ${website_name} | tr ',' ' '`
  187. do
  188. [ ! -e "${wwwroot_dir}/${WebSite}" ] && { echo "[${wwwroot_dir}/${WebSite}] not exist"; break; }
  189. [ ! -e "${backup_dir}" ] && mkdir -p ${backup_dir}
  190. PUSH_FILE="${backup_dir}/Web_${W}_$(date +%Y%m%d_%H).tgz"
  191. if [ ! -e "${PUSH_FILE}" ]; then
  192. pushd ${wwwroot_dir} > /dev/null
  193. tar czf ${PUSH_FILE} ./$W
  194. popd > /dev/null
  195. fi
  196. /usr/local/bin/qshell rput ${qiniu_bucket} /`date +%F`/${PUSH_FILE##*/} ${PUSH_FILE}
  197. if [ $? -eq 0 ]; then
  198. /usr/local/bin/qshell listbucket ${qiniu_bucket} /`date +%F --date="${expired_days} days ago"` /tmp/qiniu.txt > /dev/null 2>&1
  199. /usr/local/bin/qshell batchdelete -force ${qiniu_bucket} /tmp/qiniu.txt > /dev/null 2>&1
  200. rm -f /tmp/qiniu.txt
  201. fi
  202. done
  203. }
  204. WEB_S3_BK() {
  205. for W in `echo ${website_name} | tr ',' ' '`
  206. do
  207. [ ! -e "${wwwroot_dir}/${WebSite}" ] && { echo "[${wwwroot_dir}/${WebSite}] not exist"; break; }
  208. [ ! -e "${backup_dir}" ] && mkdir -p ${backup_dir}
  209. PUSH_FILE="${backup_dir}/Web_${W}_$(date +%Y%m%d_%H).tgz"
  210. if [ ! -e "${PUSH_FILE}" ]; then
  211. pushd ${wwwroot_dir} > /dev/null
  212. tar czf ${PUSH_FILE} ./$W
  213. popd > /dev/null
  214. fi
  215. ${python_install_dir}/bin/s3cmd put ${PUSH_FILE} s3://${s3_bucket}/`date +%F`/${PUSH_FILE##*/}
  216. [ $? -eq 0 ] && ${python_install_dir}/bin/s3cmd rm -r s3://${s3_bucket}/`date +%F --date="${expired_days} days ago"` > /dev/null 2>&1
  217. done
  218. }
  219. WEB_GDRIVE_BK() {
  220. # get the IP information
  221. IPADDR=$(../include/get_ipaddr.py)
  222. IPADDR=${IPADDR:-127.0.0.1}
  223. Parent_root_id=$(/usr/local/bin/gdrive list --no-header -q "trashed = false and name = '${IPADDR}'" | awk '{print $1}')
  224. [ -z "${Parent_root_id}" ] && Parent_root_id=$(/usr/local/bin/gdrive mkdir ${IPADDR} | awk '{print $2}')
  225. Parent_sub_id=$(/usr/local/bin/gdrive list --no-header -q "'${Parent_root_id}' in parents and trashed = false and name = '`date +%F`'" | awk '{print $1}')
  226. [ -z "${Parent_sub_id}" ] && Parent_sub_id=$(/usr/local/bin/gdrive mkdir -p ${Parent_root_id} `date +%F` | awk '{print $2}')
  227. for W in `echo ${website_name} | tr ',' ' '`
  228. do
  229. [ ! -e "${wwwroot_dir}/${WebSite}" ] && { echo "[${wwwroot_dir}/${WebSite}] not exist"; break; }
  230. [ ! -e "${backup_dir}" ] && mkdir -p ${backup_dir}
  231. PUSH_FILE="${backup_dir}/Web_${W}_$(date +%Y%m%d_%H).tgz"
  232. if [ ! -e "${PUSH_FILE}" ]; then
  233. pushd ${wwwroot_dir} > /dev/null
  234. tar czf ${PUSH_FILE} ./$W
  235. popd > /dev/null
  236. fi
  237. /usr/local/bin/gdrive upload -p ${Parent_sub_id} ${PUSH_FILE}
  238. if [ $? -eq 0 ]; then
  239. Parent_expired_id=$(/usr/local/bin/gdrive list --no-header -q "'${Parent_root_id}' in parents and trashed = false and name = '`date +%F --date="${expired_days} days ago"`'" | awk '{print $1}')
  240. [ -n "${Parent_expired_id}" ] && /usr/local/bin/gdrive delete -r ${Parent_expired_id} > /dev/null 2>&1
  241. fi
  242. done
  243. }
  244. WEB_DROPBOX_BK() {
  245. for W in `echo ${website_name} | tr ',' ' '`
  246. do
  247. [ ! -e "${wwwroot_dir}/${WebSite}" ] && { echo "[${wwwroot_dir}/${WebSite}] not exist"; break; }
  248. [ ! -e "${backup_dir}" ] && mkdir -p ${backup_dir}
  249. PUSH_FILE="${backup_dir}/Web_${W}_$(date +%Y%m%d_%H).tgz"
  250. if [ ! -e "${PUSH_FILE}" ]; then
  251. pushd ${wwwroot_dir} > /dev/null
  252. tar czf ${PUSH_FILE} ./$W
  253. popd > /dev/null
  254. fi
  255. /usr/local/bin/dbxcli put ${PUSH_FILE} `date +%F`/${PUSH_FILE##*/}
  256. [ $? -eq 0 ] && /usr/local/bin/dbxcli rm -f `date +%F --date="${expired_days} days ago"` > /dev/null 2>&1
  257. done
  258. }
  259. for DEST in `echo ${backup_destination} | tr ',' ' '`
  260. do
  261. if [ "${DEST}" == 'local' ]; then
  262. [ -n "`echo ${backup_content} | grep -ow db`" ] && DB_Local_BK
  263. [ -n "`echo ${backup_content} | grep -ow web`" ] && WEB_LOCAL_BK
  264. fi
  265. if [ "${DEST}" == 'remote' ]; then
  266. echo "com:::[ ! -e "${backup_dir}" ] && mkdir -p ${backup_dir}" > config_backup.txt
  267. [ -n "`echo ${backup_content} | grep -ow db`" ] && DB_Remote_BK
  268. [ -n "`echo ${backup_content} | grep -ow web`" ] && WEB_Remote_BK
  269. ./mabs.sh -c config_backup.txt -T -1 | tee -a mabs.log
  270. fi
  271. if [ "${DEST}" == 'oss' ]; then
  272. [ -n "`echo ${backup_content} | grep -ow db`" ] && DB_OSS_BK
  273. [ -n "`echo ${backup_content} | grep -ow web`" ] && WEB_OSS_BK
  274. fi
  275. if [ "${DEST}" == 'cos' ]; then
  276. [ -n "`echo ${backup_content} | grep -ow db`" ] && DB_COS_BK
  277. [ -n "`echo ${backup_content} | grep -ow web`" ] && WEB_COS_BK
  278. fi
  279. if [ "${DEST}" == 'upyun' ]; then
  280. [ -n "`echo ${backup_content} | grep -ow db`" ] && DB_UPYUN_BK
  281. [ -n "`echo ${backup_content} | grep -ow web`" ] && WEB_UPYUN_BK
  282. fi
  283. if [ "${DEST}" == 'qiniu' ]; then
  284. [ -n "`echo ${backup_content} | grep -ow db`" ] && DB_QINIU_BK
  285. [ -n "`echo ${backup_content} | grep -ow web`" ] && WEB_QINIU_BK
  286. fi
  287. if [ "${DEST}" == 's3' ]; then
  288. [ -n "`echo ${backup_content} | grep -ow db`" ] && DB_S3_BK
  289. [ -n "`echo ${backup_content} | grep -ow web`" ] && WEB_S3_BK
  290. fi
  291. if [ "${DEST}" == 'gdrive' ]; then
  292. [ -n "`echo ${backup_content} | grep -ow db`" ] && DB_GDRIVE_BK
  293. [ -n "`echo ${backup_content} | grep -ow web`" ] && WEB_GDRIVE_BK
  294. fi
  295. if [ "${DEST}" == 'dropbox' ]; then
  296. [ -n "`echo ${backup_content} | grep -ow db`" ] && DB_DROPBOX_BK
  297. [ -n "`echo ${backup_content} | grep -ow web`" ] && WEB_DROPBOX_BK
  298. fi
  299. done