Script che copia directory aggiornata con condizioni
Moderatore: Staff
Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Script che copia directory aggiornata con condizioni
Ciao a tutti..
premesso che non ho alcuna esperienza di shell script vi chiedo un aiuto..
dunque...
il mio obiettivo è creare uno script che:
1- monta una directory condivisa di un server windows su /mnt/script_import (cosi funzia:
#mount -o username=pippo,password=pippo //192.168.10.12/backup /mnt/script_import)
2-dentro la directory remota "backup" ci sono i file di log dei server( log vecchi e giornalieri)..
All'interno di questi file di log c'è sempre una stringa "ESITO:OK" e "ESITO:KO"...
Come faccio a fare in modo che mi venga stampato a video o inserito in un file qualsiasi i log del giorno prima e solo quelli che al loro 'interno hanno la stringa "ESITO:KO" oppure che salva in un file soltanto i log con stringa "ESITO:KO"?
spero di essere stato chiaro...
grazie e buona giornata
premesso che non ho alcuna esperienza di shell script vi chiedo un aiuto..
dunque...
il mio obiettivo è creare uno script che:
1- monta una directory condivisa di un server windows su /mnt/script_import (cosi funzia:
#mount -o username=pippo,password=pippo //192.168.10.12/backup /mnt/script_import)
2-dentro la directory remota "backup" ci sono i file di log dei server( log vecchi e giornalieri)..
All'interno di questi file di log c'è sempre una stringa "ESITO:OK" e "ESITO:KO"...
Come faccio a fare in modo che mi venga stampato a video o inserito in un file qualsiasi i log del giorno prima e solo quelli che al loro 'interno hanno la stringa "ESITO:KO" oppure che salva in un file soltanto i log con stringa "ESITO:KO"?
spero di essere stato chiaro...
grazie e buona giornata
- lamarozzo
- Linux 3.x

- Messaggi: 732
- Iscritto il: gio 14 lug 2005, 0:00
- Desktop: xfce
- Distribuzione: archlinux
- Località: Roma
non sono un gran praticante di bash, ma farei così. La parte per montare la directory remota l'hai già scritta tu. Poi per trovare tutti i log con meno di 24h che hanno la stringa "ESITO:KO" puoi fare semplicemente:
e se vuoi salvarli in un file redirigi l'output:
spero faccia al caso tuo. A presto 
Codice: Seleziona tutto
find /mnt/script_import -ctime 0 -print | grep "ESITO:KO"
Codice: Seleziona tutto
find /mnt/script_import -ctime 0 -print | grep "ESITO:KO" > nomefile
Grazie per la risposta..
non funziona!
mi spiego non dà errori.semplicemente non trova la stringa ESITO:OK
la directory script_import è cosi strutturata:
20070705 (directory)
20070705.log(file)
20070705.short.log(file)
20070706(directory)
20070706.log(file)
20070706.short.log(file)
non capisco perchè non stampa a video la stringa in questione
non funziona!
mi spiego non dà errori.semplicemente non trova la stringa ESITO:OK
la directory script_import è cosi strutturata:
20070705 (directory)
20070705.log(file)
20070705.short.log(file)
20070706(directory)
20070706.log(file)
20070706.short.log(file)
non capisco perchè non stampa a video la stringa in questione
lamarozzo ha scritto:non sono un gran praticante di bash, ma farei così. La parte per montare la directory remota l'hai già scritta tu. Poi per trovare tutti i log con meno di 24h che hanno la stringa "ESITO:KO" puoi fare semplicemente:
e se vuoi salvarli in un file redirigi l'output:Codice: Seleziona tutto
find /mnt/script_import -ctime 0 -print | grep "ESITO:KO"
spero faccia al caso tuo. A prestoCodice: Seleziona tutto
find /mnt/script_import -ctime 0 -print | grep "ESITO:KO" > nomefile
- targzeta
- Iper Master

- Messaggi: 6643
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Premetto che non ho capito quello che vuoi, eccoti qualcosa:
Il comando precedente, per tutti i file presenti nell'albero di directory /mnt/script_import, stampa a video le righe che contengono ESISTO:OK o ESISTO:KO.
Questo invece, sempre per tutti i file blablabla, stampa a video solo le righe che contengono ESISTO:OK.
Analogamente:
questo stampa le righe che contengono ESISTO:KO.
Io non ho capito se vuoi stampare a video queste righe, oppure l'intero file che contiene queste righe.
Spina
Codice: Seleziona tutto
find /mnt/script_import -ctime 0 -type f -print | xargs sed -n '/ESISTO:OK/p;/ESISTO:KO/p;'Codice: Seleziona tutto
find /mnt/script_import -ctime 0 -type f -print | xargs grep ESISTO:OKAnalogamente:
Codice: Seleziona tutto
find /mnt/script_import -ctime 0 -type f -print | xargs grep ESISTO:KOIo non ho capito se vuoi stampare a video queste righe, oppure l'intero file che contiene queste righe.
Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
Lo script che ho posto qui su slacky mi serve per andare a prendere dentro la directory /mnt/script_import tutti i file che al loro interno contengano la stringa "ESITO OK" e "ESITO KO"...vorrei sia stamparli a video e che inserirli dentro un file chiamato file.txt..
Questo perchè:
Dobbiamo generare sript per nagios un plugin che faccia un controllo su di un file e indidui un campo specifico ( nome Host ) e gli abbini lo status di ok o ko ovvero critical o normal
esempio
#> more file.txt
host 01 ok
host02 ok
host03 ko
eseguo lo script
#> ./script.sh - host02
output in uscita lo scrit printa
verifica eseguita ok
#> ./script.sh - host03
verifica eseguita critical ko
Questo perchè:
Dobbiamo generare sript per nagios un plugin che faccia un controllo su di un file e indidui un campo specifico ( nome Host ) e gli abbini lo status di ok o ko ovvero critical o normal
esempio
#> more file.txt
host 01 ok
host02 ok
host03 ko
eseguo lo script
#> ./script.sh - host02
output in uscita lo scrit printa
verifica eseguita ok
#> ./script.sh - host03
verifica eseguita critical ko
spina ha scritto:Premetto che non ho capito quello che vuoi, eccoti qualcosa:
Il comando precedente, per tutti i file presenti nell'albero di directory /mnt/script_import, stampa a video le righe che contengono ESISTO:OK o ESISTO:KO.Codice: Seleziona tutto
find /mnt/script_import -ctime 0 -type f -print | xargs sed -n '/ESISTO:OK/p;/ESISTO:KO/p;'
Questo invece, sempre per tutti i file blablabla, stampa a video solo le righe che contengono ESISTO:OK.Codice: Seleziona tutto
find /mnt/script_import -ctime 0 -type f -print | xargs grep ESISTO:OK
Analogamente:questo stampa le righe che contengono ESISTO:KO.Codice: Seleziona tutto
find /mnt/script_import -ctime 0 -type f -print | xargs grep ESISTO:KO
Io non ho capito se vuoi stampare a video queste righe, oppure l'intero file che contiene queste righe.
Spina
- targzeta
- Iper Master

- Messaggi: 6643
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Ok, quindi vuoi uno script che generi un file.txt con il formato che ho quotato giusto?fabriBit ha scritto: #> more file.txt
host 01 ok
host02 ok
host03 ko
Faccio l'assunzione che il path completo del file non contiene spazi. Se così non fosse lo script va modificato:
Codice: Seleziona tutto
for file in `find /mnt/script_import -ctime 0 -type f`;
do
if grep -q ESISTO:OK $file;
then echo "$file ok";
elif grep -q ESISTO:KO $file;
then echo "$file ko";
fi;
done
Inoltre mi devi dire se posso fare l'assunzione che, se esiste nel file la stringa ESISTO:OK o ESISTO:KO, ne esiste solo una delle due ed è univoca (assunzione al quanto ragionevole penso).
Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
avrai ben capito che non ci capiamo molto di script shell
vabbe' ti spiego il problema
a fronte di un file di log in formato txt dobbiamo con awk determinare 3 tipi di campi
il campo data, nome host, esito del backup ( identificato nel file di testo con "ok" o "ko" )
ora lo script deve sotto richiesta del nome host restituire con un imput ( vedi un print ) a monitor il corrispettivo OK o KO
ovvero
localhost.loacaldomain# ./script.sh -NomeHost
localhost.loacaldomain#
check eseguito data nomehost stato OK
oppure
check eseguito data nomehost stato KO
lo script deve abbinare il nome macchina con gli eventuali campi ok o ko adiacenti nel file di log generato dal sistema di backup file originale
vabbe' ti spiego il problema
a fronte di un file di log in formato txt dobbiamo con awk determinare 3 tipi di campi
il campo data, nome host, esito del backup ( identificato nel file di testo con "ok" o "ko" )
ora lo script deve sotto richiesta del nome host restituire con un imput ( vedi un print ) a monitor il corrispettivo OK o KO
ovvero
localhost.loacaldomain# ./script.sh -NomeHost
localhost.loacaldomain#
check eseguito data nomehost stato OK
oppure
check eseguito data nomehost stato KO
lo script deve abbinare il nome macchina con gli eventuali campi ok o ko adiacenti nel file di log generato dal sistema di backup file originale
spina ha scritto:Ok, quindi vuoi uno script che generi un file.txt con il formato che ho quotato giusto?fabriBit ha scritto: #> more file.txt
host 01 ok
host02 ok
host03 ko
Faccio l'assunzione che il path completo del file non contiene spazi. Se così non fosse lo script va modificato:Questa è una bozza, non è ottimizzato per niente, come vedi può eseguire anche due grep per ogni file incontrato. Dimmi comunque se è quello che vuoi, poi ti posso scrivere qualcosa di meglio.Codice: Seleziona tutto
for file in `find /mnt/script_import -ctime 0 -type f`; do if grep -q ESISTO:OK $file; then echo "$file ok"; elif grep -q ESISTO:KO $file; then echo "$file ko"; fi; done
Inoltre mi devi dire se posso fare l'assunzione che, se esiste nel file la stringa ESISTO:OK o ESISTO:KO, ne esiste solo una delle due ed è univoca (assunzione al quanto ragionevole penso).
Spina
Ora posso essere più chiaro:
Con questo script( che per semplicità chiamerò mio_script.sh) ho finalmente quello che mi serve:
#!/bin/bash
mount -o username=admin,password=pippo //101.289.133.12/backup /mnt/
cd /mnt
DATA=$(date +%Y%m%d --date='1 day ago')
cat $DATA".short.log"|grep "OK"|awk {'print $1,$7,$11'}
cat $DATA".short.log"|grep "KO"|awk {'print $1,$7,$11'}
cd ..
umount /mnt
exit
mi restituisce DATA NOME-HOST ESITO....e fin qui tutto ok
chiaro che l'elenco delle macchine è molto lungo..quindi vorrei trovare il modo
di lanciare lo script di cui sopra e passargli come argomento il nome macchina, in modo che mi restituisca l'esito...
esempio
#./mio_script.sh NOME_HOST
check eseguito data nomehost stato OK
oppure
check eseguito data nomehost stato KO

Con questo script( che per semplicità chiamerò mio_script.sh) ho finalmente quello che mi serve:
#!/bin/bash
mount -o username=admin,password=pippo //101.289.133.12/backup /mnt/
cd /mnt
DATA=$(date +%Y%m%d --date='1 day ago')
cat $DATA".short.log"|grep "OK"|awk {'print $1,$7,$11'}
cat $DATA".short.log"|grep "KO"|awk {'print $1,$7,$11'}
cd ..
umount /mnt
exit
mi restituisce DATA NOME-HOST ESITO....e fin qui tutto ok
chiaro che l'elenco delle macchine è molto lungo..quindi vorrei trovare il modo
di lanciare lo script di cui sopra e passargli come argomento il nome macchina, in modo che mi restituisca l'esito...
esempio
#./mio_script.sh NOME_HOST
check eseguito data nomehost stato OK
oppure
check eseguito data nomehost stato KO
spina ha scritto:L'unica cosa che ho capito è che non ci capiamo. Diamoci un appuntamento su Instant Messenger, quando ti fà più comodo. Ti mando i miei indirizzi con un Messaggio Privato.
Spina
