[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