Pagina 1 di 1

log monitoring + esecuzione script

Inviato: mar 12 mag 2009, 17:11
da Slack_Eater
Ciao a tutti,

sto cercando un software che mi permetta di eseguire uno script quando avviene un determinato cambiamento su un file di log,
possibilmente deve funzionare anche su OpenBSD.

In pratica il programma deve "restare in ascolto" e in caso di un cambiamento ben specifico nel file, per esempio aggiunta di una linea contenete xxx, deve
fare partire un script sh.

Voi ne conoscete qualcuno?

Grazie!! 8) 8)

Re: log monitoring + esecuzione script

Inviato: mar 12 mag 2009, 17:43
da targzeta
Bhé, senza scomodare dei programmi, una soluzione potrebbe essere uno script eseguibile (ad esempio casa.sh):

Codice: Seleziona tutto

#!/bin/sh
while [ 1 -eq 1 ]; do
  if grep -m 1 xxx >/dev/null; then
    script_da_eseguire
  fi
done
e poi mettere in pipe:

Codice: Seleziona tutto

tail -f log_file | casa.sh
Un altra soluzione è quella di usare awk con la funzione system()

Codice: Seleziona tutto

tail -f log_file | awk '/xxx/{ system("path_dello_script_da_eseguire") }'
La differenza tra i due è che mentre il primo, la prima volta che lo avvii, esegue lo script solo una volta indipendentemente dal numero di xxx che già ci sono, il secondo esegue lo script tante volte per quante volte trova xxx. Spero di essermi spiegato bene :)

Spina

Re: log monitoring + esecuzione script

Inviato: mar 12 mag 2009, 18:02
da dr4kk4r
puoi usare monit :D

Re: log monitoring + esecuzione script

Inviato: mar 12 mag 2009, 18:33
da Mario Vanoni
spina ha scritto:Bhé, senza scomodare dei programmi, una soluzione potrebbe essere uno script eseguibile (ad esempio casa.sh):

Codice: Seleziona tutto

#!/bin/sh
while [ 1 -eq 1 ]; do
  if grep -m 1 xxx >/dev/null; then
    script_da_eseguire
  fi
done
e poi mettere in pipe:

Codice: Seleziona tutto

tail -f log_file | casa.sh
Un altra soluzione è quella di usare awk con la funzione system()

Codice: Seleziona tutto

tail -f log_file | awk '/xxx/{ system("path_dello_script_da_eseguire") }'
La differenza tra i due è che mentre il primo, la prima volta che lo avvii, esegue lo script solo una volta indipendentemente dal numero di xxx che già ci sono, il secondo esegue lo script tante volte per quante volte trova xxx. Spero di essermi spiegato bene :)

Spina
Scusa Spina,
perche' non usare tail -f -n 1 filename?

@Slack_Eater
monit non e` una utility X?

Re: log monitoring + esecuzione script

Inviato: mar 12 mag 2009, 19:00
da targzeta
Mario Vanoni ha scritto:Scusa Spina,
perche' non usare tail -f -n 1 filename?
Questi sono dettagli, a me interessava far vedere l'idea in se.

Spina

Re: log monitoring + esecuzione script

Inviato: mar 12 mag 2009, 23:02
da Slack_Eater
Ciao a tutti grazie per le risposte.

Allora monit non è un utility X, ha solo un piccolo web server per connettersi da remoto e la configurazione viene fatta tramite /etc/monitrc, in ogni caso è la prima cosa ha cui ho pensato per fare questo tipo di lavoro.

Però dato che la situazione è un pò più oscura (nel senso che ci sono dei dettagli che non mi permettono di usare monit e ci metterei troppo a spiegarvi i motivi) potrebbe andare bene l'opzione che suggerisce spina (la prima variante) in concomitanza con quello che dice Mario (-n 1).
Il grep di OpenBSD ha delle differenze, e una di queste è che non ha l'opzione -m (dovrei verificare se non è espressa con un'altra lettera; anche -wo non funziona come su linux), però non dovrebbe essere grave siccome dopo si andrà a fare il grep solo su una linea.

Domani provo e vi faccio sapere! 8) 8) :thumbright:

Re: log monitoring + esecuzione script

Inviato: mar 12 mag 2009, 23:39
da targzeta
Senza '-m 1' lo script non funziona, quell'opzione serve per far terminare grep al primo riscontro. Se grep non esce il tuo script non verrà mai eseguito, ti conviene usare awk.

Spina

Re: log monitoring + esecuzione script

Inviato: mer 13 mag 2009, 8:46
da Paoletta
spina ha scritto:Senza '-m 1' lo script non funziona, quell'opzione serve per far terminare grep al primo riscontro. Se grep non esce il tuo script non verrà mai eseguito, ti conviene usare awk.

Spina
oppure puoi usare lo script con l'opzione -o di grep, in modo che ogni volta grep esce lo stesso

Re: log monitoring + esecuzione script

Inviato: mer 13 mag 2009, 20:46
da Slack_Eater
Ciao,

ho provato ad utilizzare lo script di spina e funziona.
Nel frattempo ho trovato questi software che svolgono proprio le funzioni che cercavo, se vi interessano dategli un occhiata:

-swatch, http://server.html.it/articoli/leggi/22 ... controllo/, http://swatch.sourceforge.net/
-logsurfer, http://www.crypt.gen.nz/logsurfer/
-logwatch, http://www.logwatch.org/

Saluti 8) 8) 8) 8) 8)