|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Mar 2006
Messaggi: 61
|
[BASH]Monitoring script
Ciao ragazzi,
ho bisogno di una mano Avrei bisogno di monitorare alcuni server e farmi inviare mail se uno di questi non risponde al ping. Necessito però di utilizzare un file (list.txt) che contiene 3 colonne (nome server, ip gataway, ip address) e n righe. Il file (list.txt) è così composto (esempio): Codice:
server1 30.30.30.1 30.30.21.1 server2 30.30.30.2 30.30.21.2 server3 30.30.30.3 30.30.21.3 Codice:
#!/bin/bash #Check IP for i in $(cat list.txt | awk '{ print $2}') do #n=$(cat lista | awk '{ print $1}') ping -c 1 -w 1 $i &> /dev/null if [ $? -ne 0 ]; then echo "GW $i DOWN!" fi done Se rimuovo il commento da #n=$(cat lista | awk '{ print $1}') e inserisco la variabile $n in "echo" (echo "GW $n DOWN!") mi da giustamente come output tutta la lista della colonna 1... Dovrei poi inserire allo stesso modo il check della colonna 3 e l'alert via mail (check ogni 15 min nel crontab). Grazie a tutti per l'aiuto! -w- |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Mar 2007
Città: Milano Beach
Messaggi: 1691
|
Ciclare sulle intere righe del file e separare ip, nome e gateway all'interno del ciclo?
Rapidamente (sicuramente la sintassi va corretta): Codice:
for i in $(cat lists.txt) do ip = echo $i | awk '{ print $2}' server = echo $i | awk '{ print $1}' ping -c 1 -w 1 $ip &> /dev/null if [ $? -ne 0 ]; then echo "GW $server DOWN!" fi done
__________________
~ Cthulhu: MacBookPro 13.3" ~ Azathoth: D510MO |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Mar 2006
Messaggi: 61
|
Grazie 1000,
utilizzando la tua idea sono riuscito nel mio intento. Ho utilizzato però un ciclo while in questo modo: Codice:
#Check IP while read server gw ip; do if ! ping -c 1 -w 1 $ip &> /dev/null ; then echo "GW $server ($gw) IS DOWN!" fi done < lista.txt while read server gw ip; do if ! ping -c 1 -w 1 $ip &> /dev/null ; then echo "IP $server $gw IS DOWN!" fi done < list.txt Già che ci sono... Posso utilizzare un solo ciclo while? Se si in che modo? Inoltre dovrei fare in modo che mandi una mail solo se entrambi gli ip ($ip e $gw) dello stesso host ($server) siano down. E con questa avrei concluso! Grazie ancora... |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:42.