Ich habe ein paar Webserver die ich gerne überwachen würde und habe mir ein kleines Script geschrieben das eine Liste von Servern mit nmap überprüft ob sie erreichbar sind und wenn nicht dann mittels zenity (erzeugt Gtk+ Dialog boxen) mir eine Fehlermeldungs Box ausgibt.
Das ganze ist gedacht von einen Cronjob regelmässig ausgeführt zu werden.
Da ich mich als Anfänger bezeichnen würde wär ich für Tipps sehr dankbar.
Code: Alles auswählen
#!/usr/bin/python
# check if a list of webservers are running.
import subprocess, re, sys
from time import sleep
from os import path
servers = ['server1.at', 'server2.at', 'server3.at']
interval = 60 #seconds
#check if nmap is installed
if not path.exists("/usr/bin/nmap"):
sys.exit("""You must install the package "nmap" first!""")
#check for "verbose" parameter
try:
if 'verbose' in sys.argv[1]:
verbose = True
else:
verbose = False
except:
verbose = False
def getOnlinestatus(server):
""" scan with nmap port 80 and search for the "open"-string """
cmd = "nmap %s -p 80" % server
process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
process.wait()
msg = process.stdout.read()
pattern = re.compile("80/tcp open http")
return pattern.search(msg)
def sendAlarm(server):
""" send a error-message window with zenity """
cmd = "env DISPLAY=:0 zenity --error --title='ERROR %s is down!' --text='ERROR %s is down!'" % (server, server)
process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
process.wait()
for server in servers:
if verbose:
print "\n+------------------------------+"
print "check: " + server
if getOnlinestatus(server):
if verbose:
print "%s is up." % server
else:
if verbose:
print "%s have maybe a problem!" % server
if verbose:
print "wait %d and checking after again." % interval
sleep(interval)
#try again
if verbose:
print "wakeup, check again %s." % server
if getOnlinestatus(server):
if verbose:
print "%s looks now ok." % server
else:
#alarm
if verbose:
print "%s not up send alert!" % server
sendAlarm(server)