Forum Informatica 2 Majorana
Uscita dallo script in caso di errore - Versione stampabile

+- Forum Informatica 2 Majorana (http://www.istitutomajorana.it/forum2)
+-- Forum: Sistemi Operativi: Ubuntu, Windows, Linux, Altri (http://www.istitutomajorana.it/forum2/Forum-Sistemi-Operativi-Ubuntu-Windows-Linux-Altri)
+--- Forum: Shell di Linux (Terminale o Console) e script (http://www.istitutomajorana.it/forum2/Forum-Shell-di-Linux-Terminale-o-Console-e-script)
+--- Discussione: Uscita dallo script in caso di errore (/Thread-Uscita-dallo-script-in-caso-di-errore)



Uscita dallo script in caso di errore - ariex - 16-07-2018

Buona sera a tutti,
Avrei bisogno del vostro aiuto per il perfezionamento di uno script.
la situazione è la seguente:
- due NAS in cui ci sono n cartelle di rete;
- il primo NAS master e il secondo slave su cui viene salvata una copia con rsync;
- il nome delle cartelle è identico.
Lo script funziona, e compie i seguenti passaggi:
1 definisce il percorso di una cartella per il file di log;
2 controlla se la cartella non esiste e la crea;
3 definisce il file di log(composto dalla data in cui viene fatto);
4 controlla se le cartelle locali in /media/ su cui saranno montate le cartelle di rete esistono altrimenti le crea;
5 monta la cartella direte sorgente (da cui vengono copiati i dati);
6 monta la cartella di rete di destinazione (su cui vengono copiati i dati);
7 con il comando rsync copia i dati da sorgente a destinazione.
Lo script funziona fino a quando non c'è un problema di rete, come ad esempio una risorsa non disponibile, per che nonostante l'errore continua a copiare i dati nelle cartella montate, fino a quando non si esaurisce lo spazio del sistema operativo.
Vorrei mettere una condizione nel momento in cui vado a montare la risorsa tipo:
if "mount......... " da errore scrivilo nel file errori, esci e passa all'istruzione successiva.
Però non riesco a farlo.
Poterste aiutarmi per favore??
in allegato lo script in questione

Codice:
#!/bin/bash
#Prova di script copia file

Directory_log=/media/LogNAS

if [ ! -d "$Directory_log" ]; then
mkdir $Directory_log
fi


Log=$Directory_log/"Log_prova_del_`date +%d%m%y`".txt

echo "bkp prova del giorno `date +%y%m%d`" >>$Log


if [ ! -d /media ]; then
mkdir /media
fi
if [ ! -d /media/54 ]; then
mkdir /media/master
fi

if [ ! -d /media ]; then
mkdir /media
fi
if [ ! -d /media/246 ]; then
mkdir /media/slave
fi


Directory_sorgente=/media/master/cartella1
Directory_destinazione=/media/slave/cartella1


if [ ! -d "$Directory_sorgente" ]; then
mkdir $Directory_sorgente
fi

if [ ! -d "$Directory_destinazione" ]; then
mkdir $Directory_destinazione
fi


sudo mount -t cifs -o username=admin,password=password,gid=1000,uid=1000,sec=ntlm,vers=1.0 //172.178.0.213/cartella1 $Directory_sorgente

sudo mount -t cifs -o username=admin,password=BOCCAPIENA,gid=1000,uid=1000,sec=ntlm,vers=1.0 //172.178.0.245/cartella1 $Directory_destinazione

echo "cartella1  inizio copia `date`" >>$Log
rsync -avd --delete $Directory_sorgente/ $Directory_destinazione/ >> $Log
echo "cartella1 fine copia `date`" >>$Log

umount $Directory_sorgente
umount $Directory_destinazione

echo "*************************" >>$Log
echo  >>$Log




Directory_sorgente=/media/master/cartella2
Directory_destinazione=/media/slave/cartella2


if [ ! -d "$Directory_sorgente" ]; then
mkdir $Directory_sorgente
fi

if [ ! -d "$Directory_destinazione" ]; then
mkdir $Directory_destinazione
fi


sudo mount -t cifs -o username=admin,password=password,gid=1000,uid=1000,sec=ntlm,vers=1.0 //172.178.0.213/cartella2 $Directory_sorgente

sudo mount -t cifs -o username=admin,password=BOCCAPIENA,gid=1000,uid=1000,sec=ntlm,vers=1.0 //172.178.0.245/cartella2 $Directory_destinazione

echo "cartella1  inizio copia `date`" >>$Log
rsync -avd --delete $Directory_sorgente/ $Directory_destinazione/ >> $Log
echo "cartella1 fine copia `date`" >>$Log

umount $Directory_sorgente
umount $Directory_destinazione

echo "*************************" >>$Log
echo  >>$Log



RE: Uscita dallo script in caso di errore - zafran - 17-07-2018

La butto lì perché usare if mount mi sembra una buona idea.
Potresti provare a usare l'output confrontandone il contenuto co la stringa che cerchi.
Con mount vedi cosa è montato e con grep restringi il campo di ricerca.

E come al solito la sintassi... è un'altra storia


RE: Uscita dallo script in caso di errore - ariex - 19-07-2018

grazie zafran

Per ora ho risolto e sembra funzionare.
se avete suggeriementi

Codice:
if ping -c 2 172.178.0.213 | grep ttl ; then
echo "nas 172.178.0.213 master on line" >>$Log
    if ping -c 2 172.178.0.245 | grep ttl ; then
        echo "nas 172.178.0.245 slave on line" >>$Log
        sudo mount -t cifs -o username=admin,password=password,gid=1000,uid=1000,sec=ntlm,vers=1.0 //172.178.0.213/cartella1 $Directory_sorgente
        sudo mount -t cifs -o username=admin,password=password,gid=1000,uid=1000,sec=ntlm,vers=1.0 //172.178.0.245/cartella1 $Directory_destinazione
        echo "cartella cartella1 `date`" >>$Log
        rsync -avd --delete $Directory_sorgente/ $Directory_destinazione/ >> $Log
        echo "cartella cartella1 fine `date`" >>$Log
        umount $Directory_sorgente
        umount $Directory_destinazione
    else echo "nas 172.178.0.245 slave non montato" >>$Log
    fi
else echo "nas 172.178.0.213 master non montato" >>$Log
fi