Newsgroup: it.comp.os.linux.iniziare
Titolo: Evento modifica file

Ho l'esigenza di creare un semplicissimo script che mi invii una mail ogni
volta che un file cambia cotenuto.
In pratica ho un file di log che mi segnala se il server è primario o
secondario con le perole primary e secondary. Vorrei che quanto cambiasse da
uno stato all'altro facesse qualcosa... (vedi mail)
Grazie a tutti.


#!/bin/bash
  tail -f -n0 file | while read LINE
do
  echo $LINE|egrep "primary" >/dev/null && echo "primario"
  echo $LINE|egrep "secondary" >/dev/null && echo "secondario"
done
Ovviamente al posto di "echo primario" (o secondario) puoi metterci
un comando qualsiasi.
-- 
Ciao, Mario. - 
http://digilander.iol.it/mccmario/

 done
Ma in questo modo, se ho ben capito, fa un ciclo loop durante il quale
controlla lo stato del file. Tanto č vero che mandato in esecuzione non ho
piů il prompt... visto che lui sta lavorando (a parte che comunque non mi
torna nulla!).
E' questo l'unico modo?
Grazie a tutti.

Chiedo scusa...
mi sono accorto troppo tardi della presenza di -n0 nel comando tail. Non
tornava nulla.
Una volta corretto e mandato in esecuzione mi torna la giusta stringa ma
solo al momneto dell'esecuzione. Poi resta in loop. Se però da un altro
terminale modifico il file... non accade nulla.
Grazie ancora.

altro terminale modifico il file... non accade nulla.
Prima di tutto lancia lo script con l'opzione "&" cosi' liberi il
terminale. "nomescript &" oppure "./nomescript &" se lo script e'
nella directory corrente.
E poi in che senso non accade nulla ?, si limita ad intervenire
SOLO alle giuste condizioni. Io ad esempio lo uso in accoppiata
ad ipchains per controllare in tempo reale se qualcuno bussa alle
mie porte quando sono connesso, e ti assicuro che funziona.
Spiegati meglio.


 mie porte quando sono connesso, e ti assicuro che funziona.
Per cominciare a fare qualche prova, prima di arrivare al mio obiettivo,
vorrei
che mandare in esecuzione lo script sul tty1 e, se modifico il file in
questione dal tty2,
il tty1 visualizzasse il messaggio cosě come tu hai fatto.
Per ora non fa questo. Se lo mando in esecuzione apportando di nuovo le
modifice
(-n0 e togliendo /dev/null) resta in memoria perchč lo vedo con ps ma se
modifico il file
non accade nulla. Devo dire ad echo dove agire?
Grazie ancora!

ps ma se modifico il file non accade nulla. Devo dire ad echo dove agire?
Ti faccio un esempio pratico: Apro un terminale ed avvio lo script
che ho chiamato "cippa" (la solita fantasia)
mario@debian:~$ cippa
 
Lo script resta in attesa. Ora volo su un altro terminale e da li
scrivo un:
mario@debian:~$ echo "primary" >>file
(cioe' ho "appeso", ho "aggiunto" roba nel file), Torno sull'altro
terminale e mi vedo:
mario@debian:~$ cippa
primario 
Hai visto che ha funzionato ?, ha mandato in echo la parola "primario"
e quindi lo script funziona perfettamente. Per ucciderlo "killall tail"
Cioe', se nel file di log viene scritta la parola "primary" lo script
agisce di conseguenza. Idem con la parola "secondary". Ed ignora tutto
il resto. Non era questo che volevi ?


> Non era questo che volevi ?
In realtà da come l'hai spiegato si...
Vorrei ad esempio mandare una mail ogni volta che avviene una modifica al
file. L'invio della mail andrà a sostituire l'attuale echo... una cosa per
volta!
L'unico dubbio che mi rimane (da come tu hai scritto ora le cose) è che nel
tuo esempio vai ad aggiungere al file, mentre a me il file si compone sempre
e solo di una riga ed una colonna. Se prima c'era Primary dopo trovo
Secondary, ma o una o l'altra.
Spero sia questo il problema che incontravo e che si possa risolvere
facilemente!
Ciao e grazie ancora.

Secondary, ma o una o l'altra.
Ah ancora piu' difficile :-)
#!/bin/bash
File=file-di-log
Byte=`cat $File | wc -c`
   tail -f -n0 $File | while read LINE
do
   NewByte=`cat $File | wc -c`
   if [ $Byte != $NewByte ]; then
     grep "primary" $File >/dev/null && echo "primario"
   grep "secondary" $File >/dev/null && echo "secondario"
   Byte=`cat $File | wc -c`
 fi
done


E' proprio lui...
Ma da come l'hai scritto credo che eri sicuro che funzionasse!
Mario... grazie mille.

Lo script come già detto funziona... ma ho un altro problema.
Se lo mando in esecuzione con la "&" finale... riesco a sbloccare il
terminale. Ma se qualcuno mi killa bash a me crolla tutto... come evitere
ciò?
Grazie.

nohup 'progr' &