linux user group brescia

immagine del castello

Archivio della mailing list

[LugBS] Udev e script bash

Maurizio Paolini paolini a dmf.unicatt.it
Lun 17 Nov 2014 14:11:22 UTC
Alcune cose che possono cambiare tra una esecuzione "a mano" ed una
automatizzata:

- associazione ad una tty; a volte e' utile premettere un "nohup" all'esecuzione
di un comando (vedi "man nohup"), mi riferisco ad esempio ad "rsync", anche tenendo
conto che la redirezione dell'output (con ">>", nel caso specifico) *non* redirige
lo standard error.

- le variabili di ambiente possono essere diverse.  In particolare la "PATH" (questa
cosa rompe parecchio le scatole tipicamente negli script a tempo via cron).  E' possibile
che la PATH sia ridotta all'essenziale, e non e' detto che /usr/sbin/ sia compresa.
Comunque non mi pare che sia quello il problema visto che usi la path completa,
con l'esclusione di "echo", che pero' credo si riferisca alla versione interna della bash.

- la localizzazione... puo' rompere le scatole perche' ad esempio l'ordinamento alfabetico
dipende dalla "locale".  Quando ci si ricorda conviene premettere un "export LANG=C" e un
"export LC_ALL=C".

mp

On Mon, Nov 17, 2014 at 01:54:39PM +0100, Paolo Zanotti wrote:
> questo è lo script (manualmente lo script non dà problemi - grazie)
> 
> 
> 
> 
> #!/bin/bash
> 
> EMAIL_DEST="info a example.com"
> EMAIL_SUBJECT="BAK USB"
> LOG=/tmp/logbakusb
> 
> 
> MOUNT_POINT=/mnt/usbdisk
> DEVICE=/dev/backusb
> 
> SOURCE=/home/example/backups
> TARGET="$MOUNT_POINT/backups/example"
> 
> 
> echo "start backup at `date +%d-%m-%Y`-`date +%H:%M:%S`" > $LOG
> 
> /usr/bin/mail -s "$EMAIL_SUBJECT - START" "$EMAIL_DEST" < $LOG
> 
> DIRS="dir1 dir2 dir3 dir4 dir5"
> 
> 
> umount $MOUNT_POINT
> 
> mount $DEVICE $MOUNT_POINT
> 
> ESITO=$?
> 
> if [ $ESITO -eq 0 ]
> then
>         for d in $DIRS
>         do
>                 echo "`date +%H:%M:%S` - rsync $SOURCE/$d" >> $LOG
>                 /usr/bin/rsync -avzq --delete "$SOURCE/$d" $TARGET >> $LOG
>                 echo "`date +%H:%M:%S` - rsync $SOURCE/$d COMPLETATO" >>
> $LOG
>         done
> fi
> 
> 
> echo "`date +%H:%M:%S` - avvio sync" >> $LOG
> 
> /bin/sync
> 
> echo "`date +%H:%M:%S` - sync completato" >> $LOG
> 
> 
> echo "`date +%H:%M:%S` - umount $MOUNT_POINT" >> $LOG
> 
> umount $MOUNT_POINT
> 
> 
> /usr/bin/mail -s "$EMAIL_SUBJECT - END" "$EMAIL_DEST" < $LOG
> 
> 
> 
> Il giorno 17 novembre 2014 13:42, Furio Settimi <furio.settimi a gmail.com>
> ha scritto:
> 
> > posta anche lo script, che e' quello che sembra non andare
> >
> > Il giorno 17 novembre 2014 12:18, Paolo Zanotti <zanotti.paolo a gmail.com>
> > ha scritto:
> >
> >> Ciao a tutti,
> >>     ho creato una regola per fare in modo che all'inserimento di un disco
> >> USB, venga avviato automaticamente uno script bash.
> >> Il disco viene collegato a una macchina con ubuntu server 12.04 64 bit.
> >>
> >> Lo script esegue queste istruzioni:
> >>
> >> - invia un'email di "inizio bash"
> >> - monta il disco
> >> - esegue un rsync di alcune directories
> >> - smonta il disco
> >> - invia un'email di "fine bash"
> >>
> >> Il problema è che lo script a un certo punto si pianta.
> >> Se avviato manualmente lo script funziona correttamente.
> >>
> >> Se commento il comando rsync, lo script inizia e termina correttamente.
> >>
> >> Non mi spiego perchè dopo aver ciclato "x" directories su "n" lo script
> >> si pianta mentre manualmente non ciò accade.
> >>
> >> Questa è la regola di udev
> >>
> >> ACTION=="add",KERNEL=="sd?1", ATTRS{idVendor}=="1d6b",
> >> ATTRS{idProduct}=="0002", ATTRS{serial}=="0000:00:12.2", SYMLINK+="bakusb",
> >> RUN+="/usr/local/bin/bakToUsb"
> >>
> >>
> >> Suggerimenti?
> >> Grazie
> >>
> >> Paz.
> >>
> >> --
> >> ------------------------------------------
> >> Paolo Zanotti
> >>
> >> --
> >> Info/Lamentele/Segnalazioni: andrea.gelmini a gmail.com
> >>
> >
> >
> > --
> > Info/Lamentele/Segnalazioni: andrea.gelmini a gmail.com
> >
> 
> 
> 
> -- 
> ------------------------------------------
> Paolo Zanotti

> -- 
> Info/Lamentele/Segnalazioni: andrea.gelmini a gmail.com



Maggiori informazioni sulla lista Lug