Newsgroup: it.comp.os.linux.sys
Titolo: trigger di uno script

Ciao a  tutti , vi spiego il mio problema.
Devo fare un script che si connetta a svariate macchine
unix(AIX,SOLARIS,LINUX)che acceda in automatico via telnet e poi faccia un
df -k ogni giorno e confronti sulle macchine se ci sono stati dei
cambiamenti.
Voi vi chiderete come mai, io vi dico che non c'è molta comunicazione nella
mia azienda e la gente fa senza avvisare nessuno, quindi volevo fare uno
script che tenesse traccia di tutti cambiamenti sulle macchine che sono
tante.
Lo script l'ho fatto ma mi mi sono un pò arenato perchè riesco solo ad
eseguire una SOLA sessione telnet, non riesco a fare altre connessioni
finita la prima, sarà che non conosco ancora bene l'ambiente bash ma non 
riesco a richiamare le funzioni alla fine della connessione telnet.
In poche parole dovrei verificare quando si disconnette dalla prima sessione
telnet per far partire la seconda e cosi via via....
Ecco il codice:
#-----------------------------------------------------------------
#funzione che setta i parametri di connessione
#-----------------------------------------------------------------
function parametriMacchine {
    NOMEFILE=`date +%d%m%Y`
    NOMEHOST=`hostname`
    
    tempArray=(10.212.21.66 root cippa '' '')
    let contatore+=0
   
    let "a=0+$contatore"
    let "b=1+$contatore"
    let "c=2+$contatore"
    let "d=3+$contatore"
    let "e=4+$contatore"
 
    HOST="${tempArray[$a]}"
    LOGN="${tempArray[$b]}"
    PWRD="${tempArray[$c]}"
    SUPER="${tempArray[$d]}"
    PWSU="${tempArray[$e]}"
    let contatore+=5
   
    echo $contatore
    init #inizializzo la funz. init
    }
#-------------------------------------------
#funzione che crea la directory ed i file
#------------------------------------------- 
function costruisci {
if test -d $HOST ; then
 df -k > $HOST/"$NOMEFILE".txt
 else
 mkdir $HOST &&  df -k > $HOST/"$NOMEFILE".txt
 fi
}
#-------------------------------------------
#funzione che fa il confronto fra i file
#------------------------------------------- 
  
function verifica   {
confronto1=` wc -l < $HOST/*_old.txt`
confronto2=`wc -l < $HOST/"$NOMEFILE".txt`
if test  $confronto1 -eq  $confronto2  ; then
 printf "%s\n" "confronto giusto"
else
 echo "confronto sbagliato"
 mailx -s  "su $NOMEHOST ip:$HOST ci sono stati dei cambiamenti" 
c...@pippo.it
 < testo.txt
 #rm -f  $HOLD/*.txt
 #rm -f  $HOLD/"$NOMEFILE".txt
fi 
}
#-------------------------------------------------------- 
#comandi che scrivono i file ed eseguono la connessione
#---------------------------------------------------------
function init {
    CONTROLLA=`costruisci`
    VERIFICAFILE=`if test -e $HOST/*_old.txt ; then verifica    ; else  df
-k > $HOST/"$NOMEFILE"_old.txt ; fi `
     ( for  i in "open $HOST" "$LOGN" "$PWRD" "$SUPER" "$PWSU" "$CONTROLLA"
"$VERIFICAFILE" 
      do
      echo $i
      sleep 2
      done ) |  telnet 
}
parametriMacchine #inizializzo la funz. che passa i paramentri diconnessione
#-----------------------------FINE---------------------------------------------

imho scaricati dsh e usa quella , è una shell distribuita.
ciao.
-- 
Pippo: "Cosa stai facendo?".
Boy-scout: "Pianto la tenda".
Pippo: "Bravo!  Annaffiala per bene, e vedrai come crescera' rigogliosa!".
                -- "Topolino"

 ciao.
Grazie mille, ma non voglio installare dsh non voglio mettere mani su una
6800 della SUN.
Alla fine dovrei solo recuperare la fine della sessione telnet e rifar
partire lo script con i parametri di un'altra macchina.
Penso che sia un approccio piu giusto al problema che installare roba nuova
per fare una cosa.
Grazie.
Ciao.

 Grazie.
in questo caso userei expect .
bye.
-- 
Chi siamo?
Dove andiamo?
Da dove veniamo?
E soprattutto: veniamo, qualche volta?
                -- "Sciacqui quotidiani", Radio Babboleo

 cambiamenti.
ma che telnet e telnet, devi fare remsh, rcmd o giu' di li.
--
Massimiliano.

 ma che telnet e telnet, devi fare remsh, rcmd o giu' di li.
p.s.: tieni presente che lo standard output/error di remsh, rcmd et 
similia e' locale e non remoto, il che ti facilita ancor adi piu' le 
cose. ;)
-- 
Massimiliano.

 cambiamenti.
Concettualmente io farei il contrario: sulle singole macchine lancerei in
cron uno script che mi esegue il df -k mettendo l'output in un file
temporaneo il quale viene copiato in un qualche modo (scp, ftp) sulla tua
macchina.
Poi in locale, sulla tua macchina, fai i diff che vuoi...
-- 
Luca Villani     NOC Manager  -  Wireless Solutions S.p.A.  (Dada Group)
http://www.wseurope.com
          via Castiglione 25, 40124 Bologna Italy
T:
+39 051 2966826
   F:
+39 051 2966800
   M:
+39 348 5298542
   UIN:76272621
GPG public key available

Massimiliano Adamo wrote:

Non ci credo siamo OMONIMI è la prima volta che mi succede stesso nome 
stesso cognome.
Di dove sei?
Non è che siamo parenti?
Ciao.

 Poi in locale, sulla tua macchina, fai i diff che vuoi...
Ciao Luca ma è quello che voglio evitare replicare lo script su tutte le
macchine perchè ne ho veramente tante, e poi e meglio un script che si
connete a tutte le macchine in automatico che te che manualmente inserisci
uno script per ogni macchina.
Ciao

 Ciao.
mmhhh. Tu dici che sei di Milano, ma non con quel cognome.
Sputa l'osso ;)
--
Massimiliano.

 che te che manualmente inserisci uno script per ogni macchina.
Per me no.
Anche solo perché in questo modo è la macchina stessa che mi notifica se
qualcosa non va, e se non ricevo nulla significa che la macchina non è più
viva.
Ripeto, lo si fa una volta sola, poi il tutto va da solo.
E poi: se su una macchina lo script rimane appeso, blocca tutto, anche il
check delle altre macchine.


 check delle altre macchine.
Penso di non  aver capito bene ma la tua proposta e di inserire nel cron di
utte le macchine lo script o ho capito male?

 utte le macchine lo script o ho capito male?
ma non sai usare comandi tipo rexec e similia?
Sono su tutte le macchine unix, pertanto non devi installare niente.
Massimiliano.

 cambiamenti.
ti giuro che questo script che hai fatto e' bello ma e' talmente 
arzigogolato che se ne' puo fare anche a meno. array, function ... ma 
che devi fare?
fai cosi' ....
**** accetta tutti gli errori di sintassi perche' sono in windows e non 
posso provare niente ****
Premetti che io uso remsh che su linux non esiste. Tu userai l'analogo 
di linux con la opportuna sintassi. con l'eventuale .rhosts configurato 
o quel che e'.
L'ipotesi e' che tu devi fare questo controllo sulle macchine con IP da 
10 a 20.
=--------------------------------------------------------------=
#!/tuo/interprete/bash
#
for i in 'seq 10 20'
do
	remsh 10.212.21.$i df -k >10.212.21.$i/`date +%d%m%Y`.txt
done
=--------------------------------------------------------------=
FINE DI TUTTA LA STORIA!
se sulla tua distibuzione linux disgraziatamente non ci fosse 'seq', 
allora fai cosi':
=--------------------------------------------------------------=
#!/tuo/interprete/bash
#
for i in "10 11 12 13 14 15 16 17 18 19 20"
do
	remsh 10.212.21.$i df -k >10.212.21.$i/`date +%d%m%Y`.txt
done
=--------------------------------------------------------------=
FINE DI TUTTA LA STORIA!
4 righe contro 100. Che te ne pare?
--
Massimiliano.

 di utte le macchine lo script o ho capito male?
Non è una proposta, è quello che ho fatto io con parecchi ckeck di nagios.
Poi ognuno si regola come vuole e come si trova meglio... :-)
-- 
Ciao da Villo    -    GPG public key available
                      Ferrara LUG 
http://ferrara.linux.it
        Remove "+settanta" for email replies
Protect your Freedom: 
http://www.againsttcpa.com/index.shtml