Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. #/bin/bash
  2. _help(){
  3. cat << fim
  4. Autor:
  5.     Ricardo Brito do Nascimento
  6.  
  7. Email:
  8.     britodfbr[at]incolume.com.br
  9.  
  10. Descrição:
  11.     Este script realiza o backup via repozo do plone versão 2.5.5 ou superior;
  12.     pode ser utilizado para realizar backups de versões anteriores,
  13.     entretanto não foi testado, e possivelmente será necessário
  14.     customização para funcionar adequadamente.
  15.     Além do backup realiza controle de retenção do backup, excluindo automaticamente
  16.     os arquivos antigos.
  17.    
  18. Variáveis de configuração:
  19.     DAYS - dias de retenção;
  20.     FILESTORAGEDIR - diretório de instalação;
  21.     BACKUPDIR - diretório que os backups serão mantidos;
  22.     REPOZO - plone 3.3.5 ou superior '"/opt/p335/${B}/bin/repozo"';
  23.              plone 2.5.5 '`find ${FILESTORAGEDIR} -name "*repozo*" -iwholename "*bin*"`'
  24.     EXCEPTION[n] - diretórios ou arquivos que terão validade ignorada;
  25.     VOL[n] - volumes de disco remotos;
  26.     STORAGEDIR[n] - ponto de montagem dos volumes de disco;
  27.     ARQANX - diretório para gravar os arquivos anexos FSS ou Blobstorage
  28.     BKPCONF - diretório para gravar os backups de configuração
  29. Versão: 9
  30. Execução:
  31.     $0; ou
  32.     $0 -h | --help | ?
  33. fim
  34. }
  35. ########### Variavéis de configuração ########
  36. DAYS=2
  37. HOSTNAME=$(/bin/hostname | /bin/awk -F. '{if (NR>0) { A=$1 } else { A=$NF }; print A}')
  38. VOL[0]=192.168.22.2:/vol/zope_dzeta
  39. VOL[1]=192.168.22.2:/vol/zope_dmz
  40. VOL[2]=192.168.22.2:/vol/zope_bkp
  41. STORAGEDIR[0]=/opt
  42. STORAGEDIR[1]=/storage/arquivosAnexos
  43. STORAGEDIR[2]=/storage/backup
  44. EXCEPTION[0]=".snapshot"
  45. EXCEPTION[1]="arquivosAnexos"
  46. EXCEPTION[2]="plone_conf.tar"
  47. EXCEPTION[3]="Products.list"
  48. FILESTORAGEDIR=${STORAGEDIR[0]}/p255
  49. ARQANX=${STORAGEDIR[1]}
  50. BACKUPDIR=${STORAGEDIR[2]}/${HOSTNAME}
  51. BKPCONF=$BACKUPDIR/conf
  52. REPOZO=($(find $FILESTORAGEDIR -iwholename "*bin*" -name "repozo*" -print))
  53. TAR=$(which tar)
  54. FIND=$(which find)
  55. RM=$(which rm)
  56.  
  57.  
  58. #REMOTEHOST="192.168.22.2"
  59. #REMOTEDIR=/vol/zope_dmz
  60. #LOCALDIR=/storage/arquivosAnexos
  61. #
  62. ###########  Funções ################
  63. _erro(){
  64. cat << fim
  65. opção inválida, consulte o help, com as opções --help ou, -h ou, ?.
  66. fim
  67. }
  68.  
  69. _confTar(){
  70.  
  71. echo "===inicio confTar=== "
  72. [ ! -e ${BKPCONF} ] && mkdir -pv $BKPCONF;
  73.  
  74. ${FIND} ${FILESTORAGEDIR} -iwholename "*etc*" -name "*.conf" -printf '%h %f \n'|while read a b; do A=$(dirname `dirname ${a#${STORAGEDIR[0]}}`); echo $A; echo $b; echo "---"; tar -rvf ${BKPCONF}/${HOSTNAME}`sed 's;/;_;g' <<< $A`_`date +%-F`.tar $a/$b; echo "===="; done
  75.  
  76. ${FIND} ${FILESTORAGEDIR} -maxdepth 1 -mindepth 1 -type f ! -iwholename "*Zope*" \( -name "*.cfg" -o -name "bootstrap.py" \) -printf '%h %f \n'|while read p f; do ${TAR} rvf ${BKPCONF}/${HOSTNAME}_$(sed 's\/\_\g;' <<< ${p#${STORAGEDIR[0]}}).tar $p/$f; done
  77. #
  78. echo "===fim confTar=== "
  79. }
  80.  
  81. _verifyNFS(){
  82. # Este script verifica o compartilhamento remoto, se não tiver ativo
  83. # ele é montado
  84. #echo "==="
  85. ##Unitários
  86. #echo ${VOL[0]}
  87. #echo ${VOL[1]}
  88. #echo ${VOL[2]}
  89. #echo "==="
  90. ##Quantitativos
  91. #echo ${#VOL[*]}
  92. ##Todos os elementos
  93. #echo ${VOL[@]}
  94. #echo "==="
  95. ##Todos os elementos
  96. #echo ${VOL[*]}
  97. #
  98. #echo "==="
  99.     mount
  100. echo "==="
  101. echo "=inicio verifyNFS="
  102.     for ((i=0;i<${#VOL[*]};i++ )); do
  103.     echo $i - ${VOL[$i]}
  104.     grep -Eo ${VOL[$i]} /etc/mtab >> /dev/null
  105.     [ `echo $?` == "1" ] && mount ${VOL[$i]} ${STORAGEDIR[$i]}||echo "ok"
  106.     done
  107. echo "==="
  108.     mount
  109. echo "=fim verifyNFS="
  110.  
  111. }
  112.  
  113. _repozoBackup(){
  114. echo "=inicio repozoBackup="
  115. echo ${REPOZO[@]}
  116. if [ ${#REPOZO[*]} -ge 1 ]; then
  117.     ${FIND} $FILESTORAGEDIR -type f -iwholename "*var*" -name "*.fs" -printf '%h %f\n'|while read a b; do A=$BACKUPDIR/`dirname ${a#${FILESTORAGEDIR}}`/${b%.fs}; mkdir -pv $A; ${REPOZO[@]} -BFvzf $a/$b -r $A; echo ---; done
  118. else
  119.     ${FIND} $FILESTORAGEDIR -type f -iwholename "*var*" -name "*.fs" -printf '%h %f\n'|while read a b; do A=$BACKUPDIR; B=$(awk -F/ '{print $4"/"$5}' <<< ${a}); C=${b%.fs}; mkdir -pv ${A}/${B}/${C}; ${REPOZO} -BFvzf ${a}/${b} -r ${A}/${B}/${C}; done
  120. fi
  121. echo "=fim repozoBackup="
  122. }
  123.  
  124.  
  125. _removeOld(){
  126. echo "=inicio removeOld="
  127. LIMITE=$(expr ${#EXCEPTION[*]} - 1)
  128. COMMAND="${FIND} $BACKUPDIR ( -ctime +${DAYS} -o -atime +${DAYS} -o -mtime +${DAYS} )"
  129. for ((i=0;i<=${LIMITE};i++)); do
  130. #   echo $i;
  131. #   echo ${LIMITE}
  132. #   echo ${COMMAND}
  133.     [ $i -eq 0 ] && COMMAND+=" ! ( ";
  134.     COMMAND+=" -iwholename \"*${EXCEPTION[$i]}*\"";
  135.     if [ \( $i -ge 0 \) -a \( $i -lt ${LIMITE} \) ]; then
  136.        COMMAND+=" -o ";
  137.     else
  138.        COMMAND+=" ) -exec rm -vrf {} ;";
  139.        #COMMAND+=" ) -exec ls {} ;";
  140.     fi
  141. done
  142.     echo ${COMMAND}
  143.     ${COMMAND}
  144. echo "=fim removeOld="
  145. }
  146.  
  147. _start(){
  148. _erro;
  149. }
  150.  
  151. _stop(){
  152. _erro;
  153. }
  154.  
  155. _restart(){
  156. _erro
  157. }
  158.  
  159. _status(){
  160. _erro
  161. }
  162.  
  163. case $1 in
  164.     start) _start;;
  165.     stop) _stop;;
  166.     status) _status;;
  167.     restart) _restart;;
  168.     -h|--help|?) _help;;
  169.     '') echo '= Menu =='
  170.         _verifyNFS;
  171.             _repozoBackup;
  172.         _confTar;
  173.             _removeOld;
  174.         echo;;
  175.     *) _erro ;;
  176. esac