[Gulli] script in cron

Alberto Cortesi cortesialberto@tiscali.it
Mar 27 Gen 2009 11:36:10 CET


Cercasi esperto di scripting....

Il seguente script esegue il backup di alcune cartelle, poi crea una 
immagine iso, e masterizza il dvd  poi "stocca" la iso stessa in una 
cartella per 90 giorni,  ed infine le elimina, per far posto alle iso 
più recenti.
è in grado di intercettare errori tipo disco non inserito e capacità 
disco insufficiente. Butta giù la macchina dopo il backup ed altro e 
avverte una lista di persone, via e-mail, di quanto è successo, nel bene 
e nel male.

Il fatto è che funziona benissimo e non credo che dia problemi. Ma, a 
parte il fatto che l'ho scritto solo tre giorni fa, e quindi è 
betissimo,  questo script funziona sotto cron, solo parzialmente:
durante della creazione dell'iso, si blocca inspiegabilmente a 506,7 Mb, 
poi parte il segnale di shutdown e la macchina va giù, la mail ricevuta 
riporta che tutto è avvenuto con successo!


Ho esportato il profile dell'utente in ambiete cron, ho provato a 
verificare che il mio script fosse compatibile con la shell sh (quella 
di cron), e lo è, ho provato a far partire lo script in cron grazie ad 
un launcher dentro crontab.
Ho inserito i path assoluti nello scritp, persino cp ha il suo path 
assoluto, anche se non sarebbe stato necessario.
I comandi innestati hanno pure loro il path assoluto.

Francamente non mi è mai successo di andare in crisi con cron.

Ho provato lo script su Debian, e riadattando alcuni comadi, anche su 
Slak: non cambia nulla, a parte che su Slak il processo di creazione 
dell'iso si blocca a 1,36 Gb anzichè a 506,7 Mb


Di seguito lo script "incriminato"

Qualcuno mi saprebbe dare una mano?


##################


#!/bin/bash

# Imposto le variabili
iso="/services/iso"            # la cartela dei file iso
dest="/services/tmp-backup"        # la cartella temporanea per il Backup
sorg1="/services/pool/Musica/Alberto"    # una cartella da backuppare
sorg2="/services/pool/Musica/Amu"    # un'altra cartella da backuppare
sorg3="/services/pool/Musica/Bond"    # ancora una cartella da backuppare

# variabili per la lettura delle info del dvd
pos=37    
lun=10    

# variabili per le e-mail
mailto="pippo1@pippo.it pippo2@pippo.it"
mailfrom="pippo3@pippo.it"
server="smtp.pippo.it:25"

# Funzioni
backup()
{
# creo la cartella di destinazione
/bin/mkdir $dest

# copio le cartelle da backuppare su destinazione

/bin/cp -R $sorg1 $sorg2 $sorg3 $dest

# creo il file iso da masterizzare
/usr/bin/mkisofs -JRlV "`/bin/date +%F`" -o "$iso/`/bin/date +%F`.iso" $dest
}


masterizza()
{

# masterizzo il file iso creato
/usr/bin/cdrecord -v speed=8 driveropts=burnfree dev=/dev/sr0 -tao 
-eject -data "$iso/`/bin/date +%F`.iso" | /usr/bin/tee > 
"/services/sendEmail-v1.55/log/log-`/bin/date +%F`"

# invio un file di log
logga

# elimino la cartella di destinazione
/bin/rm -rf $dest

# Cancello i file iso più vecchi di 90 giorni
/usr/bin/find $iso -ctime +90 -delete
}


check()
{

nfil="$iso/`/bin/date +%F`.iso"
isosize=`/bin/ls -l $nfil | /usr/bin/awk '{print $5}'`
info=`/usr/bin/dvd+rw-mediainfo /dev/sr0 |/bin/grep  "Legacy lead-out at:"`

case $info in
"")
    errore="1: media non inserito, o media non rilevato"
    maila    
    /bin/rm -rf $dest
    escib
        ;;
esac

z=`/usr/bin/expr substr "$info" $pos $lun`
val=`/usr/bin/expr $z \/ 1024 \/ 1000`
isosize=`/usr/bin/expr $isosize \/ 1024 \/ 1000`


case `/usr/bin/expr $val \> $isosize` in
1)
      masterizza
        ;;
0)
    errore="0: file iso troppo grande per essere scritto su media inserito"
    maila
    /bin/rm -rf $dest
    escia
        ;;
esac
}


maila()
{

SUBJECT="Errore di backup  $errore"
MESSAGE="/tmp/msg.maila.tmp"

echo "Errore durante la masterizzazione o il backup  del `/bin/date 
+%F`" >> $MESSAGE
echo " " >> $MESSAGE
echo " " >> $MESSAGE
echo "$errore" >> $MESSAGE
echo " " >> $MESSAGE
echo "......................................................... " >> 
$MESSAGE
echo "................................................. " >> $MESSAGE
echo "........................................... " >> $MESSAGE
echo "Pisa li  `/bin/date`" >> $MESSAGE



/services/sendEmail-v1.55/sendEmail  -t "$mailto" -f "$mailfrom" -u 
"$SUBJECT" -o message-file="$MESSAGE" -s "$server"

/bin/rm $MESSAGE
}



logga()
{
soggetto="Backup eseguito con successo? Verifica nel Log allegato!"
messaggio="/tmp/msg.logga.tmp"
attach="/services/sendEmail-v1.55/log/log-`/bin/date +%F`"
echo "Di seguito il log del backup del `/bin/date +%F`" >> $messaggio
echo " " >> $messaggio
echo " " >> $messaggio
echo "$errore" >> $messaggio
echo " " >> $messaggio
echo "......................................................... " >> 
$messaggio
echo "................................................. " >> $messaggio
echo "........................................... " >> $messaggio
echo "Pisa li  `/bin/date`" >> $messaggio

/services/sendEmail-v1.55/sendEmail  -t "$mailto" -f "$mailfrom" -u 
"$soggetto" -o message-file="$messaggio" -a "$attach" -s "$server"

/bin/rm $messaggio
}


escia()
{
/bin/mkdir /services/iso/erroria  # si verifica errore x
exit 0
}


escib()
{
/bin/mkdir /services/iso/errorib # si verifica errore y
exit 0
}


# verifico i parametri passati al comando

case "$1" in
--backup)
        backup
        check    
        ;;

--only-iso)
        backup
        ;;

--free-disk)
        /usr/bin/find $iso -ctime +14 -delete
        ;;
--shutdown)
        backup
        check    
    sleep 2
        shutdown -h 0
        ;;

--help)
        cat  /services/mybin/backuppa-help
        ;;

*)
        cat /services/mybin/backuppa-help
        ;;
esac

exit 0


###################################################################


Ps
un mio cliente a Pisa ha una diecina di portatili HP 550 senza SO a 335 
Euro iva compresa





Maggiori informazioni sulla lista Gulli