[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
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
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Mar 17 22:47:18 2015 | Cross-referenced by PHPXref 0.7.1 |