Bien le bonjour tout le monde,
Alors voila, j'ai quelques questions au niveau des scripts shell. Je viens de m'y remettre depuis peu, et je voulais me faire un petit script sa sauvegarde d'environnement LXC (Je ne sais même plus mais il me semble en avoir poster un il y a pas mal de temps )
Depuis hier, j'ai fais un script, qui, sans argument fait une sauvegarde full de tous les environnements dispo LXC. Si je spécifie un argument "nomLXC" il ne va faire une sauvegarde uniquement de celui la.
(Pour la sauvegarde, je l'arrête, et j'en fais simplement un tar. Je pense qu'on peu faire bien mieux, mais j'y regarderais plus tard )
Donc pour le moment cela donne ça (Si vous avez des remarques je prends ):
#!/bin/bash
##################################
# P A R A M E T R A G E S #
##################################
DDJ=$(date +"%d-%m-%Y") # Recuperation de la date du jours
LXCPTH='/var/lib/lxc/' # Répertoire des contenaires LXC
LXCBCK=''/media/RAID/Back_up/LXC/ # Répertoire de sauvegardes des contenaires LXC
LXCLIST=$(lxc-ls)
addressmail="@gmail.com"
i=0
j=0
k=0
##########################
# F O N C T I O N S #
##########################
logo(){
echo -e "
_ __ _______ ____ _____ _ ___ _ _____
| | \ \ / / ____| | _ \ /\ / ____| |/ / | | | __ \
| | \ V / | | |_) | / \ | | | ' /| | | | |__) |
| | > <| | | _ < / /\ \| | | < | | | | ___/
| |____ / . \ |____ | |_) / ____ \ |____| . \| |__| | |
|______/_/ \_\_____| |____/_/ \_\_____|_|\_\\____/|_|
"
}
logo_deb(){
echo -e "###########################" | tee >> log-$DDJ
echo -e "# T R A I T E M E N T #" | tee >> log-$DDJ
echo -e "###########################" | tee >> log-$DDJ
}
logo_start(){
echo -e "######################" | tee >> log-$DDJ
echo -e "# D E M A R R A G E #" | tee >> log-$DDJ
echo -e "######################" | tee >> log-$DDJ
}
logo_svg(){
echo -e "########################" | tee >> log-$DDJ
echo -e "# S A U V E G A R D E #" | tee >> log-$DDJ
echo -e "########################" | tee >> log-$DDJ
}
logo_stop(){
echo -e "##############" | tee >> log-$DDJ
echo -e "# A R R E T #" | tee >> log-$DDJ
echo -e "##############" | tee >> log-$DDJ
}
listlxc() {
# Récupération des contenaires et leurs état (On/OFF)
for contenaire in $LXCLIST
do
STATE=$(lxc-info -n $contenaire | grep State | cut -d ":" -f 2 )
if [ $STATE = "RUNNING" ]
then
#echo "$contenaire = ON"
lxcon[$i]=$contenaire
i=$(($i + 1))
else
#echo "$contenaire = OFF"
lxcoff[$j]=$contenaire
j=$(($j+ 1))
fi
done
return $lxcoff[*]
return $lxcon[*]
}
fullbackup() {
echo "Emplacement des sauvegardes : " $LXCBCK | tee >> log-$DDJ
if [ ! -d $LXCBCK$DDJ ];
then
echo -e "\nCréation du répertoire $LXCBCK$DDJ" | tee >> log-$DDJ
mkdir $LXCBCK$DDJ > /dev/null 2>&1
echo -e "\nDebut du script : " $(date '+%d/%m/%y-%kh%M') | tee >> log-$DDJ
echo -e "\n" | tee >> log-$DDJ
listlxc
echo -e " \n" | tee >> log-$DDJ
logo_deb
echo -e " \n" | tee >> log-$DDJ
logo_stop
for mot in ${lxcon[*]}
do
lxcstop $mot
done
echo -e " \n" | tee >> log-$DDJ
logo_svg
for mot in ${lxcon[*]}
do
lxcsvg2 $mot
done
for mot in ${lxcoff[*]}
do
lxcsvg2 $mot
done
echo -e " \n" | tee >> log-$DDJ
logo_start
for mot in ${lxcon[*]}
do
lxcstart $mot
done
file
echo -e "\n\n\nFin du script : " $(date '+%d/%m/%y-%kh%M') | tee >> log-$DDJ
else
echo "Le répertoire existe déjà... Abandon" | tee >> log-$DDJ
fi
}
selectbackuup() {
lxc-info -n $1 > /dev/null 2>&1
if [ $? -ne 0 ]
then
echo -e "\n\nLe contenaire $1 n'existe pas" | tee >> log-$DDJ
else
logo_deb
STATE=$(lxc-info -n $1 | grep State | cut -d ":" -f 2 )
if [ $STATE = "RUNNING" ]
then
lxcstop $1
lxcsvg $1
lxcstart $1
else
lxcsvg $1
fi
fi
}
lxcstart(){
echo -e "\n$(date '+%d/%m/%y-%kh%M') : Démmarrage en coursde $1" | tee >> log-$DDJ
#lxc-start -n $1 > /dev/null 2>&1
echo -e "$(date '+%d/%m/%y-%kh%M') : Démarrage terminé avec success" | tee >> log-$DDJ
}
lxcstop(){
echo -e "\n$(date '+%d/%m/%y-%kh%M') : $1 En cours d'arrêt" | tee >> log-$DDJ
#lxc-stop -n $1 > /dev/null 2>&1
echo -e "$(date '+%d/%m/%y-%kh%M') : $1 Arret terminer" | tee >> log-$DDJ
}
lxcsvg(){
echo -e "\n$(date '+%d/%m/%y-%kh%M') : Sauvegarde en cours de : $1" | tee >> log-$DDJ
#tar cvf $LXCBCK$1.tar /var/lib/lxc/$1/ > /dev/null 2>&1
echo -e "$(date '+%d/%m/%y-%kh%M') : Sauvegarde terminer " | tee >> log-$DDJ
}
lxcsvg2(){
echo -e "\n$(date '+%d/%m/%y-%kh%M') : Sauvegarde en cours de : $1" | tee >> log-$DDJ
#tar cvf $LXCBCK$DDJ/$mot.tar /var/lib/lxc/$mot/ > /dev/null 2>&1
echo -e "$(date '+%d/%m/%y-%kh%M') : Sauvegarde terminer " | tee >> log-$DDJ
}
file(){
fichier=$(ls -l $LXCBCK$DDJ | awk -F ' ' '{print $9}')
echo -e "\n\n##########################" | tee >> log-$DDJ
echo -e "# F I C H I E R S #" | tee >> log-$DDJ
echo -e "##########################" | tee >> log-$DDJ
echo -e "$LXCBCK$DDJ" | tee >> log-$DDJ
for lxc in $fichier
do
taille=$(du -hs $LXCBCK$DDJ/$lxc | awk -F ' ' '{print $1}')
echo "$lxc : $taille" | tee >> log-$DDJ
done
taillett=$(du -hs $LXCBCK$DDJ | awk -F ' ' '{print $1}')
echo -e "\nTaille total : $taillett " | tee >> log-$DDJ
}
mail(){
sleep 15
fichier="log-"$DDJ
echo | mutt -s "[SRV1] Sauvegarde LXC" -a $fichier -- $addressmail
}
#################
# M A I N #
#################
logo | tee log-$DDJ
if [ -z $1 ]
then
fullbackup
mail
else
selectbackuup $1
fi
Maintenant, pour le fun, je ferais bien, un "menu" de restauration, qui va lister les répertoires dispo dans le répertoire de backup. Puis lister les fichiers, et enfin on lance une restauration (uniquement suppresion du LXC en cours, et décompression d'un tar)
Du coup j'ai lister les fichiers avec ceci :
restaure(){
dispo=$(ls -l $LXCBCK | awk -F ' ' '{print $9}')
echo -e "Liste des sauvegardes dispo : \n"
k=0
for restauration in $dispo
do
echo -e "[$j] : $restauration"
j=$(($j+ 1))
done
}
Ce qui donne bien :
Liste des sauvegardes dispo :
[0] : 25-03-2017
[1] : 26-03-2017
[2] : dns.tar
[3] : emby.tar
[4] : ORI
Est-ce qu'en bash on peut utiliser des tableaux à deux dimenssions ? ou est-ce qu'il y a un moyen de faire après la correspondances entre un chiffre taper par l'utilisateur et le chiffre à coté d'un fichier / répertoire ?