#!/bin/sh #Piccolo sistema di backup #Richiede rsync e un server mail tipo sendmail #usa mail per inviare l email di notifica #Ver 0.1 ######## SETTINGS ######## MAKER=`whoami` # Destinatario mail di backup, i destinatari vanno separati da virgola (,) DEST="user@provider,user1@vprovider1" # FORMATO DATA DATE=`date +"%d-%m-%y"` #Device e dir dove salvare il back_up DEV="/mnt/dati" DIR_BACKUP="backup" BIN_NAME="rsync" BIN=`which $BIN_NAME` #elenco directory del quale si vuole fare il basckup, + directory vanno separate a spazio #NB và inserito il path completo BKPATH="/boot /root /home/user" #File di log LOG="$DEV/$DIR_BACKUP/backup-$DATE.txt" #File che contiene il corpo della mail MLF="/tmp/mlbackup" #monta, nel caso sia necessario il device dove eseguire il device #la regola di montaggio deve essere contenuta in /etc/fstab #esegue controlli su montaggio corretto ed esistenza dir di backup MNT(){ TEST=`mount | grep $DEV 2>/dev/null` echo -e "\nVerifico se il device ($DEV) è già montato!\n" >>$MLF if [ -z "$TEST" ];then #restituisce vero se $TEST è vuoto mount $DEV 2>/dev/null RMT=`echo $?` #se il mount và a buon fine restituisce 0 if [ "$RMT"=="0" ];then echo -e "Device montato, proseguo!\n" >>$MLF MNTR=0 else echo -e "Non sono riuscito a montare $DEV\n" >>$MLF MNTR=1 fi else echo -e "Il device $DEV risulta gia' montato, proseguo\n" >>$MLF MNTR=0 fi if [ "$MNTR"=="0" ];then if [ ! -d $DEV/$DIR_BACKUP ]; then mkdir -p $DEV/$DIR_BACKUP 2>/dev/null RMD=`echo $?` #se il mkdir và a buon fine restituisce 0 if [ "$RMD"=="0" ];then echo -e "Dir $DEV/$DIR_BACKUP creta.\n" >>$MLF MNTR=0 else echo -e "No sono riuscito a creare $DEV/$DIR_BACKUP.\n" >>$MLF MNTR=1 fi else echo -e "$DEV/$DIR_BACKUP esiste già.\n" >>$MLF MNTR=0 fi else echo -e "Non posso creare $DEV/$DIR_BACKUP:\n\t - $DEV non montato" >>$MLF MNTR=1 fi } #Funzione nel caso non serva montare il device NOMNT(){ if [ ! -d $DEV/$DIR_BACKUP ]; then mkdir -p $DEV/$DIR_BACKUP 2>/dev/null RMD=`echo $?` #se il mkdir và a buon fine restituisce 0 if [ "$RMD"=="0" ];then echo -e "Dir $DEV/$DIR_BACKUP creta.\n" >>$MLF NMNTR=0 else echo -e "No sono riuscito a creare $DEV/$DIR_BACKUP.\n" >>$MLF NMNTR=1 fi fi } #Funzione che esegue il backup RSYNC(){ DIR="`echo $DEV | sed -e 's/\/$//'`" echo -e "\t Attendi....backup in corso"; $BIN -av $BKPATH \ $DIR/$DIR_BACKUP/ \ --progress --delete --links &> $LOG RSR=`echo $?` if [ "$RSR"=="0" ];then echo -e "\nBackup eseguito con sucesso\n">>$MLF else echo -e "\nBackup non riuscito\n">>$MLF fi } #Funzion che controlla l'esistenza del file $LOG RSLOG(){ if [ -f $LOG ];then RSLR=0 else echo -e "Il file $LOG non è stato trovato in $LOG \n" >>$MLF RSLR=1 fi } #Funzione per l'invio della mail MAIL(){ case $RSLR in 0) less $MLF | mail -s "Back-up server del $DATE" -a $LOG $DEST ;; *) less $MLF | mail -s "Back-up server del $DATE" $DEST ;; esac #rimuove il file $MLF rm $MLF } #MAIN if [ "$MAKER" == "root" ]; then echo -e "Ecco i log del backup del $DATE \n" >>$MLF case $1 in mount) echo -e "$0 utilizzato con il parametro mount \n" >>$MLF MNT if [ "$MNTR"=="0" ];then RSYNC if [ "$RSR"=="0" ];then RSLOG MAIL exit 0 else RSLOG MAIL exit 1 fi else RSLOG MAIL exit 1 fi ;; nomount) echo -e "$0 utilizzato con il parametro nomount \n" >>$MLF NOMNT if [ "$NMNTR"=="0" ];then RSYNC if [ "$RSR"=="0" ];then RSLOG MAIL exit 0 else RSLOG MAIL exit 1 fi else RSLOG MAIL exit 1 fi ;; *) echo "Devi usare $0 {mount|nomount} " exit 1 ;; esac else echo "\tDevi essere root per eseguire $0 " exit 1 fi