Newsgroup: it.comp.os.linux.sys
Titolo: Controllo errori script bash

Ciao a tutti,
ho un problemino di notifiche in uno script bash:
 
--------------------------------------
 
#!/bin/bash
 
if [ -f /var/run/rsync_su_nodo2.pid ]
   then
         echo -e "Rsync error Pid già presente"  | mail -s "Rsync error 
Pid già  presente" noti...@aaa.local
   exit 1
  else
         echo "$$" > /var/run/rsync_su_nodo2.pid
 
                 if `time rsync -apq --delete -e"ssh -p2222" 
/home/vpopmail/ ro...@192.168.1.2:/home/vpopmail/`
                 then
                         echo "Rsync OK"
                 else
                         echo -e "ERRORE RSYNC "  | mail -s "ERRORE 
RSYNC " noti...@aaa.local
                         ## Inserisco l'allarme solo la prima volta
                         if grep "$MSG" /etc/motd > /dev/null
                         then
                                         echo "messaggio già resente in 
motd"
                         else
                                         echo "" >> /etc/motd
                                         echo "$DATE - $MSG" >> /etc/motd
                         fi
                 fi
 
         rm -f /var/run/rsync_su_nodo2.pid
fi
 
echo "FINE SINCRO"
 
------------------------------------------------------------------
 
 
Il sistema va bene ma mi arriva la notifica di errore anche se trova 
file "vanished" .. e succede spesso ..
idee per non avere questi "falsi positivi" ?
 
Grazie mille
 
-- Yena --


Quale notifica di errore? Nei hai due, almeno.
 
Cos'e` un file "vanished"?
 
Per curiosita`, perche` `time rsync...` e non
`rsync...` e basta?
 
bye,
 
-- 
 
piergiorgio

                  if `time rsync -apq --delete -e"ssh -p2222" [...]
 
Cosa dovrebbe fare questo pezzo di codice? 
Quale condizione vuoi testare?
Perché usi ``time''?
 
 
 

 ho un problemino di notifiche in uno script bash:
 
Devi controllare l'exit code di rsync (guardati il man, alla fine sono 
spiegati gli exit code). Ma devi scorporarlo dal time.
 
-- 
Gabriele
 

                  if `time rsync -apq --delete -e"ssh -p2222" /home/vpopmail/ ro...@192.168.1.2:/home/vpopmail/`   then
 
questo IF e' molto equivoco (eufemismo)
 
cosi' if ti testa il codice di uscita di time, non di rsync
 
io farei
 
TIME0=$(date)
rsync .......
EXITCODE=$?
TIME1=$(date)
 
if [ $EXITCODE = 0 ] ; then
	echo "ok"
else
	echo "nobbuono"
fi
 
ciao
 
-- 
PaoloPě
 

 cosi' if ti testa il codice di uscita di time, non di rsync
 
Che dovrebbe essere lo stesso, credo.
Cioe` "time" restituisce l'exit code del programma
che lancia per misurarne il tempo di esecuzione.
 
bye,
 
-- 
 
piergiorgio


 
 
E' lo stesso
 
  time ( exit 1; )
  echo $?
  time ( exit 0; )
  echo $?
 


Che cosa è un file "vanished" ?
In quale riga sta il problema ?
 
 
 
 
 


Esatto i vanished.
time perchè volevo aggiungere qualcosa che mi desse anche il tempo di 
esecuzione via email..
 
Grazie!
 
-- Yena --
 

 Perché usi ``time''?
 
Lo script deve sincronizzare alcune dir fra due server.
La condizione che vorrei testare è l'IF che nel caso di file vanished mi 
riporta errori che non vorrei mi venissero notificati.
 
Ho messo time per un uso futuro.. vorri che mi riportasse anche
il tempo di esecuzione.. quanto ci ha messo a sincronizzare l'albero di dir.
 
Grazie!
 
-- Yena --
 


Esatto
 
-- Yena --
 

 In quale riga sta il problema ?
 
Un file vanished è un file che è scomparso mentre rsync sta lavorando..
Nel mio server di posta è comune ... es code.
 
Riga: if `time rsync ....
 
Grazie
 
-- Yena --

 ...
 
 
Non hai risposto a nessuna delle mie domande. In particolare:
Cosa sono i file "vanished"?
Quale condizione vuoi testare con quell'``if''?
 
 

 Quale condizione vuoi testare con quell'``if''?
 
 
Vedo che comunque hai detto in un altro post che un file /vanished/
è  semplicemente un file scomparso al momento del trasferimento 
effettivo. A parte l'uso stucchevole di termini inglesi, fai come ti hanno
già suggerito alcuni, lascia che rsync faccia il proprio lavoro in pace
e dopo controlli il suo stato di uscita.
 
Le altre domande restano ancora senza risposta.


OK, compreso
Per risolvere un  modo è usare l' opzione --ignore-errors  e se accetti 
che il filesystem sia sempre integro e che il disco non abbia mai 
settori difettosi puo essere una opzione valida
 
 
Un altro modo è andare di fino
Usare l' opzione --list-only per ottenere solo una lista dei files, 
eseguire un loop sulle righe della lista, trasferire un file per volta e 
raccogliere solo gli errori che interessano
 
 

 Un file vanished è un file che è scomparso mentre rsync sta lavorando..
 
Dovresti fare uno snapshot del filesystem,
oppure del device, prima di fare "rsync".
 
Altrimenti non sai cosa stai effettivamente
sincronizzando e naturalmente hai degli errori.
Che sono *errori* appunto.
 
In alternativa, se possibile, montare il
filesystem in read-only mode.
 
bye,
 
-- 
 
piergiorgio

 cosi' if ti testa il codice di uscita di time, non di rsync
 
 
allora si può usare la variabile SECONDDS della bash.
INIZIO=$SECONDS prima dell'esecuzione
FINE=$SECONDS  dopo l'esecuzione
TEMPO=$(($FINE - $INIZIO))