[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3master/usr/share/se3/scripts/ -> svg_se3_v3.sh (source)

   1  #!/bin/bash
   2  #
   3  ##### Script de sauvegarde de divers paramètres SE3 #####
   4  #
   5  # Auteur : Stephane Boireau (Bernay/Pont-Audemer (27))
   6  #
   7  ## $Id: svg_se3_v3.sh 7714 2013-03-16 01:00:26Z keyser $ ##
   8  #
   9  # Dernière modif: 25/05/2006
  10  
  11  # Chemin des sauvegardes:
  12  #dossier_svg="/home/sauvegardes/fichiers_se3"
  13  dossier_svg="/var/se3/save"
  14   
  15  # ===============================
  16  # Volume maximum pour effectuer la sauvegarde de /var/lib/ldap 
  17  volume_ldap_max="100"    #### J'AI SUPPRIMé CE CHOIX... C'EST VITE ENORME AVEC SARGE ####
  18  # Si le volume de /var/lib/ldap dépasse 100Mo, on ne fait pas d'archive de /var/lib/ldap
  19  # Seul un export LDIF sera alors effectué.
  20  # ===============================
  21  
  22  # Pour conserver des fichiers de sauvegarde sur une année à raison de une par semaine.
  23  # En mettant 'oui' ci-dessous, 52 dossiers seront générés au bout d'une année.
  24  svg_hebdo="non"
  25  
  26  if [ -z "$1" -o "$1" = "--help" -o "$1" = "-h" ]; then
  27      echo "Script permettant d'effectuer la sauvegarde:"
  28      echo " - de l'annuaire LDAP"
  29      echo " - de /etc"
  30      echo " - des bases MySQL suivantes: 'se3db' et 'mysql'"
  31      echo " - de /var/lib/samba"
  32      echo ""
  33      echo "Usage : - Passer en paramètre \$1 la durée de vie en secondes du script de"
  34      echo "          sauvegarde."
  35      echo "          Passé ce délai, si le script est relancé, les tâches de sauvegarde"
  36      echo "          précédentes seront interrompues."
  37      echo "        - Passer 'conservation_hebdo' en paramètre \$2"
  38      echo "          pour conserver des exemplaires par semaine sur une année."
  39      echo "        - Passer 'backuppc' en paramètre \$2 ou \$3"
  40      echo "          si la sauvegarde est lancée par backuppc."
  41      echo "        - Passer 'forcer' en paramètre \$2 ou \$3"
  42      echo "          si la sauvegarde doit être lancée malgré le fonctionnement"
  43      echo "          de backuppc."
  44      exit
  45  fi    
  46  
  47  # On bascule en mode conservation de 52 sauvegardes par an
  48  # en plus du roulement sur 7 jours si le paramètre ci-dessous est passé:
  49  if [ "$2" = "conservation_hebdo" ]; then
  50      svg_hebdo="oui"
  51  fi
  52  
  53  # Chemin des fichiers de lock:
  54  chemin_lock="/var/lock"
  55  
  56  # Nom du fichier de lock:
  57  fich_lock="$chemin_lock/svgse3.lck"
  58  
  59  # Valeur TMP:
  60  ladate=$(date +"%Y.%m.%d-%H.%M.%S")
  61  
  62  
  63  
  64  # La sauvegarde peut être lancée en autonome ou bien via backupc.
  65  # Si backuppc tourne, la sauvegarde autonome est désactivée.
  66  # Sinon, elle peut être lancée manuellement ou via une tâche cron.
  67  # Pour lancer la sauvegarde depuis backuppc,
  68  # passer dans les paramètres ($2 ou $3) la chaine 'backuppc'
  69  if echo "$*" | grep "forcer" | grep -v grep > /dev/null; then
  70      # Le paramètre 'forcer' permet de lancer manuellement la sauvegarde, même si backuppc tourne.
  71      # Ne le faites que si voys êtes sûr de ne pas prvoquer une collision de sauvegardes
  72      # entre votre sauvegarde manuelle et la sauvegarde backuppc.
  73      quitter="non"
  74  else
  75      if echo "$*" | grep "backuppc" | grep -v grep > /dev/null; then
  76          quitter="non"
  77      else
  78          if ps aux | grep backuppc | grep -v grep > /dev/null; then
  79              quitter="oui"
  80          fi
  81      fi
  82  fi
  83  
  84  if [ $quitter = "oui" ]; then
  85      exit
  86  fi
  87  
  88  
  89  
  90  # Est-ce que la sauvegarde précédente est terminée?
  91  # et/ou s'est déroulée normalement?
  92  if [ -e "$fich_lock" ]; then
  93      t1=$(cat $fich_lock)
  94      t_expiration=$(($t1+$1))
  95      t2=$(date +%s)
  96      difference=$(($t2-$t1))
  97      heures=$(($difference/3600))
  98      minutes=$((($difference-3600*$heures)/60))
  99      secondes=$(($difference-3600*$heures-60*$minutes))
 100      if [ $t2 -gt $t_expiration ]; then
 101          echo "Problème avec $O" > /root/tmp/rapport_nettoyage_svgse3_$ladate}.txt
 102          echo "Tâche initiée en $t1 et il est $t2 soit $heures}H$minutes}M$secondes}S." >> /root/tmp/rapport_nettoyage_svgse3_$ladate}.txt
 103          echo "La tâche de sauvegarde a dépassé le délai imparti." | tee -a /root/tmp/rapport_nettoyage_svgse3_$ladate}.txt
 104          echo "Le fichier de lock n'a pas été supprimé." | tee -a /root/tmp/rapport_nettoyage_svgse3_$ladate}.txt
 105          echo "Les processus encore en cours vont être supprimés." | tee -a /root/tmp/rapport_nettoyage_svgse3_$ladate}.txt
 106  
 107          if [ $(ps aux | grep $0 | grep -v grep | wc -l) -ge 2 ]; then
 108              echo "Plusieurs exemplaires du script $0 tournent:" >> /root/tmp/rapport_nettoyage_svgse3_$ladate}.txt
 109              ps aux | grep $0 | grep -v grep >> /root/tmp/rapport_nettoyage_svgse3_$ladate}.txt
 110  
 111              # Problème comment identifier le processus courant?
 112              # $(pidof $0) n'a pas l'air de fonctionner.
 113              # Dois-je effectuer:
 114              #rm -f $fich_lock
 115              #killall $0
 116              # Je viens de tester, cela ne fonctionne pas...
 117              # Cela pose un problème...
 118              # Si la première partie de la sauvegarde ne s'arrête pas et qu'on tue le processus,
 119              # le script svg_se3... va se poursuivre et lancer la sauvegarde de la partie suivante...
 120              # Si elle merdouille elle aussi, il peut falloir un certain nombre de tours pour tout purger.
 121          fi
 122  
 123          # Est-ce que je pourrais me contenter de tuer tous les processus qui touchent à $dossier_svg
 124          if ps aux | grep $dossier_svg | grep -v "grep " > /dev/null; then
 125              echo "Liste des processus dégagés lors du nettoyage:" >> /root/tmp/rapport_nettoyage_svgse3_$ladate}.txt
 126              ps aux | grep $dossier_svg | grep -v "grep " >> /root/tmp/rapport_nettoyage_svgse3_$ladate}.txt
 127              ps aux | grep $dossier_svg | grep -v "grep " | tr "\t" " " | sed -e "s/ \{2,\}/ /g" | cut -d" " -f2 | while read PID
 128              do
 129                  echo "kill -9 $PID" | tee -a /root/tmp/rapport_nettoyage_svgse3_$ladate}.txt
 130                  kill -9 $PID 2>&1 | tee -a /root/tmp/rapport_nettoyage_svgse3_$ladate}.txt
 131              done
 132  
 133              if ps aux | grep $dossier_svg | grep -v "grep " > /dev/null; then
 134                  echo "Un des processus ne s'est pas arrêté." | tee -a /root/tmp/rapport_nettoyage_svgse3_$ladate}.txt
 135                  echo "On abandonne." | tee -a /root/tmp/rapport_nettoyage_svgse3_$ladate}.txt
 136                  quitter="oui"
 137              else
 138                  echo "Le nettoyage a été effectué, mais il est curieux que le script ait dépassé le temps imparti pour la sauvegarde." | tee -a /root/tmp/rapport_nettoyage_svgse3_$ladate}.txt
 139                  quitter="non"
 140              fi
 141  
 142              mail_admin=$(ldapsearch -xLLL uid=admin mail | grep "^mail: " | sed -e "s/^mail: //")
 143              mail_ssmtp=$(grep "^root=" /etc/ssmtp/ssmtp.conf | cut -d"=" -f2)
 144  
 145              if [ ! -z "$mail_admin" ]; then
 146                  mail $mail_admin -s "[Serveur SE3] Problème avec le processus de sauvegarde" < /root/tmp/rapport_nettoyage_svgse3_$ladate}.txt
 147              fi
 148          
 149              if [ ! -z "$mail_ssmtp" ]; then
 150                  mail $mail_ssmtp -s "[Serveur SE3] Problème avec le processus de sauvegarde" < /root/tmp/rapport_nettoyage_svgse3_$ladate}.txt
 151              fi
 152  
 153              if [ $quitter = "oui" ]; then
 154                  exit
 155              fi
 156          fi
 157  
 158          rm -f $fich_lock
 159      else
 160          echo "Une tâche de sauvegarde est déjà en cours..."
 161          echo "Elle n'a pas atteint sa durée limite autorisée."
 162          echo "Veuillez patienter."
 163          exit
 164      fi
 165  fi
 166  
 167  
 168  
 169  # Création d'un fichier de LOCK:
 170  date +%s > $fich_lock
 171  
 172  
 173  #Couleurs
 174  COLTITRE="\033[1;35m"   # Rose
 175  COLPARTIE="\033[1;34m"  # Bleu
 176  
 177  COLTXT="\033[0;37m"     # Gris
 178  COLCHOIX="\033[1;33m"   # Jaune
 179  COLDEFAUT="\033[0;33m"  # Brun-jaune
 180  COLSAISIE="\033[1;32m"  # Vert
 181  
 182  COLCMD="\033[1;37m"     # Blanc
 183  
 184  COLERREUR="\033[1;31m"  # Rouge
 185  COLINFO="\033[0;36m"    # Cyan
 186  
 187  echo -e "$COLTITRE"
 188  echo "************************************"
 189  echo "* Sauvegarde des fichiers de conf, *"
 190  echo "*   de l'annuaire, des bases,...   *"
 191  echo "************************************"
 192  
 193  echo -e "$COLCMD\c"
 194  mkdir -p "$dossier_svg"
 195  mkdir -p "$dossier_svg/mysql"
 196  mkdir -p "$dossier_svg/ldap"
 197  mkdir -p "$dossier_svg/samba"
 198  mkdir -p "$dossier_svg/etc"
 199  
 200  ladate=$(date +"%Y.%m.%d-%H.%M.%S");
 201  jour=$(date +%a|tr -d ".")
 202  semaine=$(date +%V)
 203  
 204  if [ $svg_hebdo="oui" ]; then
 205      if [ -e "$dossier_svg/svg_hebdo/num_semaine.txt" ]; then
 206          if [ $semaine != $(cat "$dossier_svg/svg_hebdo/num_semaine.txt") ]; then
 207              echo $semaine > "$dossier_svg/svg_hebdo/num_semaine.txt"
 208              rm -fr $dossier_svg/svg_hebdo/semaine_$semaine}
 209              mkdir -p $dossier_svg/svg_hebdo/semaine_$semaine}
 210              cp -a $dossier_svg/mysql $dossier_svg/svg_hebdo/semaine_$semaine}
 211              cp -a $dossier_svg/ldap $dossier_svg/svg_hebdo/semaine_$semaine}
 212              cp -a $dossier_svg/samba $dossier_svg/svg_hebdo/semaine_$semaine}
 213              cp -a $dossier_svg/etc $dossier_svg/svg_hebdo/semaine_$semaine}
 214          fi
 215      else
 216          if [ -e $dossier_svg/mysql ]; then
 217              if [ ! -z "$(ls $dossier_svg/mysql)" ]; then
 218                  mkdir -p "$dossier_svg/svg_hebdo"
 219                  echo $semaine > "$dossier_svg/svg_hebdo/num_semaine.txt"
 220                  mkdir -p $dossier_svg/svg_hebdo/semaine_$semaine}
 221                  cp -a $dossier_svg/mysql $dossier_svg/svg_hebdo/semaine_$semaine}
 222                  cp -a $dossier_svg/ldap $dossier_svg/svg_hebdo/semaine_$semaine}
 223                  cp -a $dossier_svg/samba $dossier_svg/svg_hebdo/semaine_$semaine}
 224                  cp -a $dossier_svg/etc $dossier_svg/svg_hebdo/semaine_$semaine}
 225              fi
 226          fi
 227      fi
 228  fi
 229  
 230  echo -e "$COLTXT"
 231  echo "Sauvegarde de MySQL"
 232  echo -e "$COLCMD\c"
 233  #/etc/init.d/mysql stop
 234  #ls /var/lib/mysql | while read A
 235  #do
 236  #       if [ -d "/var/lib/mysql/$A" ]; then
 237  #                base=$(echo "$A" | sed -e "s!/$!!")
 238  #                if [ -e "$dossier_svg/mysql/$base.$jour.tar.gz" ]; then
 239  #                        rm -f "$dossier_svg/mysql/$base.$jour.tar.gz"
 240  #                fi
 241  #                tar -czf "$dossier_svg/mysql/$base.$jour.tar.gz" /var/lib/mysql/$base
 242  #        fi
 243  #done
 244  #/etc/init.d/mysql start
 245  if [ -e /root/.my.cnf ]; then
 246      #ls /var/lib/mysql | while read A
 247      for base in se3db mysql
 248      do
 249          #if [ -d "/var/lib/mysql/$A" ]; then
 250          if [ -d "/var/lib/mysql/$base" ]; then
 251              #base=$(echo "$A" | sed -e "s!/$!!")
 252              if [ -e "$dossier_svg/mysql/$base.$jour.sql" ]; then
 253                  rm -f "$dossier_svg/mysql/$base.$jour.sql"
 254              fi
 255              mysqldump -uroot --default-character-set=latin1 $base > "$dossier_svg/mysql/$base.$jour.sql"
 256          fi
 257      done
 258  fi
 259  echo ""
 260  
 261  echo -e "$COLTXT"
 262  echo "Sauvegarde de LDAP"
 263  echo -e "$COLCMD\c"
 264  ldapsearch -xLLL -D "cn=admin,$(cat /etc/ldap/ldap.conf | grep '^BASE' | tr '\t' " " | sed -e 's/ \{2,\}/ /g' | cut -d' ' -f2)" -w $(cat /etc/ldap.secret) > "$dossier_svg/ldap/ldap.$jour.ldif"
 265  cp -f /var/lib/ldap/DB_CONFIG $dossier_svg/ldap/DB_CONFIG.$jour
 266  
 267  #if [ "$(du -sm /var/lib/ldap | tr '\t' ' ' | cut -d' ' -f1)" -lt $volume_ldap_max ]; then
 268  #    /etc/init.d/slapd stop
 269  #    if [ -e "$dossier_svg/ldap/var_lib_ldap.$jour.tar.gz" ]; then
 270  #        rm -f "$dossier_svg/ldap/var_lib_ldap.$jour.tar.gz"
 271  #    fi
 272  #    tar -czf "$dossier_svg/ldap/var_lib_ldap.$jour.tar.gz" /var/lib/ldap
 273  #    /etc/init.d/slapd start
 274  #fi
 275  # Au cas où, on archive le LDAP vierge:
 276  if [ ! -e "$dossier_svg/ldap/ldap.se3sav.tar.gz" -a -e /var/lib/ldap.se3sav ]; then
 277      if [ $(du -sk /var/lib/ldap.se3sav/ | tr "\t" " " | cut -d" " -f1) -le 10000 ]; then
 278          # En principe le dossier fait ~1.5Mo
 279          tar -czf $dossier_svg/ldap/ldap.se3sav.tar.gz /var/lib/ldap.se3sav
 280      fi
 281  fi
 282  echo ""
 283  
 284  echo -e "$COLTXT"
 285  echo "Sauvegarde de /var/lib/samba"
 286  echo -e "$COLCMD\c"
 287  if [ -e "$dossier_svg/samba/var_lib_samba.$jour.tar.gz" ]; then
 288          rm -f "$dossier_svg/samba/var_lib_samba.$jour.tar.gz"
 289  fi
 290  tar -czf "$dossier_svg/samba/var_lib_samba.$jour.tar.gz" /var/lib/samba
 291  echo ""
 292  
 293  echo -e "$COLTXT"
 294  echo "Sauvegarde de /etc"
 295  echo -e "$COLCMD\c"
 296  if [ -e "$dossier_svg/etc/etc.$jour.tar.gz" ]; then
 297          rm -f "$dossier_svg/etc/etc.$jour.tar.gz"
 298  fi
 299  tar -czf "$dossier_svg/etc/etc.$jour.tar.gz" /etc
 300  
 301  chown -R root:root "$dossier_svg"
 302  chmod -R 700 "$dossier_svg"
 303  echo ""
 304  
 305  rm -f $fich_lock
 306  
 307  echo -e "$COLTITRE"
 308  echo "***********"
 309  echo "* Terminé *"
 310  echo "***********"
 311  echo -e "$COLTXT"
 312  


Generated: Tue Mar 17 22:47:18 2015 Cross-referenced by PHPXref 0.7.1