[PYTHON] Überwachen Sie regelmäßig die HTTP-Antwort des Webservers

Wenn der Webserver ausfällt, werden Sie per Google Mail benachrichtigt

Ich habe so ein Drehbuch geschrieben. ** (Ich überprüfe jedoch nur, während der Computer ausgeführt wird. Soll ich ihn regelmäßig auf einem PC ausführen, der den ganzen Tag ausgeführt wird, oder auf einem anderen Server?) **

Anders als bei Google Mail können Sie es verwenden, indem Sie den SMTP-Server und die Portnummer bearbeiten.

Es sollte nicht passieren, dass der Webserver heruntergefahren ist, wenn Sie es bemerken, aber es kommt gelegentlich vor. Ich habe weder die Energie noch die Ressourcen, um Zabbix einzuführen, oder es ist ein wenig mühsam. Deshalb habe ich mich dieses Mal entschlossen, es regelmäßig von meinem Heim-PC aus zu überprüfen. Ich habe übrigens versucht, das Ergebnis im lokalen Speicher aufzuzeichnen.

Skript

Senden Sie im folgenden Skript ein HTTP-GET. Wenn Sie auf Probleme stoßen, Ein Python-Skript, das Sie per E-Mail benachrichtigt.

Wir haben den Vorgang unter Python3.3 und Windows bestätigt. Wenn Sie einen Mac oder eine andere Python-Version haben, beheben Sie diese bitte rechtzeitig.

(Wir sind nicht verantwortlich für Schäden, die durch die Ausführung des Skripts verursacht werden. Verwenden Sie es daher auf eigenes Risiko.)

webtest.py


#!/usr/bin/python
# coding: UTF-8
#Webserver-Überwachungstool
import http.client,datetime,os

#============Elemente einstellen==============
#G-Mail-Konto
gmail_sender = 'Mit deinem [email protected]'
#G-Mail-Passwort
gmail_passwd = 'Ihr Passwort'
#Fehler Mail Ziel
gmail_to = 'Soshinsaki @ E-Mail-Adresse'
#E-Mail Betreff
mail_subject =  'Es liegt ein Serverfehler vor'
#Server zu überprüfen
servers = ("www.Dein Saito 1.com","www.Ihre Website 2.net")
#Protokoll Zielverzeichnis speichern(Relativer Pfad)
log_dir = "webtestlog"
#=================================

import smtplib
from email.mime.text import MIMEText

#E-Mail senden
def sendmail(data):
	global gmail_sender,gmail_passwd,gmail_to,mail_subject
	TEXT = data
	#Anmelden
	server = smtplib.SMTP('smtp.gmail.com', 587)
	server.ehlo()
	server.starttls()
	server.login(gmail_sender, gmail_passwd)

	message = MIMEText(data,"plain","UTF-8")
	message["Subject"] = mail_subject
	message["From"] = gmail_sender
	message["To"] = gmail_to

	try:
	    server.sendmail(gmail_sender, [gmail_to], message.as_string())
	    print ('email sent')
	except Exception as e:
		print (e)
		print ('error sending mail')

	server.quit()


result = ""
error_detected = False


#Das Format des Ergebnisses. Wenn Sie dies anpassen, können Sie detailliertere Informationen hinzufügen.
def format_result(address,response):
	return address +"  "+ str(response.status) + "   " + response.reason

#Überprüfen Sie das Stammverzeichnis
def checkroot(address):
	global result,error_detected
	conn = http.client.HTTPConnection( address )
	try:
		conn.request( "GET", "/" )
	except:
		result = result + address + " CANNOT GET\n"
		error_detected = True
		return
	response = conn.getresponse()
	if response.status != 200:
		error_detected = True
	result = result + format_result(address,response) + "\n"
	conn.close()

#Überprüfen Sie hier alle Server
for each in servers:
	checkroot(each)


if not os.path.isdir(log_dir):
	os.mkdir(log_dir)

now = datetime.datetime.now()
#Zeitinformationen einbetten
result = str(now) + "\n" + result
#Antwort aufzeichnen
filename = log_dir+"\log_"+now.strftime("%y-%m-%d")+".txt";
f = open(filename, 'a') #Nachtragsmodus
f.write(result) #Ergebnis
f.close()


#Senden Sie eine E-Mail, wenn ein Fehler auftritt
if error_detected:
	sendmail(result);

Ausführungsergebnis

Im Moment wage ich es, einen Fehler in der URL zu machen und einen Fehler zu generieren, aber wenn ein 500er Fehler auftritt oder ein Fehler beim Ausführen von HTTP GET auftritt Sie erhalten eine solche E-Mail.

result.png

Erstellung von Batchdateien

Ich glaube nicht, dass das Python-Skript direkt ausgeführt werden kann, also werde ich eine Batch-Datei erstellen. (Angenommen, das Skript webtest.py befindet sich in C: \ bin.)

webtest.bat


cd C:\bin
python webtest.py

Wenn Sie keine CD haben, finden Sie webtest.py nicht! Bitte beachten Sie, dass der Fehler auftreten wird.

Planer

Versuchen Sie, das obige Skript einmal auszuführen. Wenn es ordnungsgemäß funktioniert, planen Sie es als Nächstes. Dieses Mal habe ich beschlossen, es regelmäßig mit dem Windows-Taskplaner auszuführen.

Systemsteuerung> Suche nach "Zeitplan"> Aufgabe planen

n.png

Wenn der Taskplaner gestartet wird, erstellen Sie ihn entsprechend mit "Basisaufgabe erstellen". Halten Sie den Abzug "jeden Tag". (Sie können es später in kurzer Zeit ändern) Wenn Sie das Programm auswählen, wählen Sie die vorherige Batchdatei aus.

Überprüfen Sie alle X Minuten

Bearbeiten Sie den Trigger. fsa.png

In den Hintergrund stellen

Es ist laut, jedes Mal einen Blick auf die Eingabeaufforderung zu werfen. Verstecken Sie sie also.

Geben Sie im Eigenschaftenbildschirm Benutzer oder Gruppe ändern> SYSTEM und OK ein Es ist in Ordnung, wenn "Benutzerkonto, das bei der Ausführung der Aufgabe verwendet wird:" zu "NT AUTHORITY \ SYSTEM" wird.

aa.png

Recommended Posts

Überwachen Sie regelmäßig die HTTP-Antwort des Webservers
Django gibt den Inhalt der Datei als HTTP-Antwort zurück
Die Geschichte des erneuten Bereitstellens des Anwendungsservers
Visualisieren Sie den Antwortstatus der Volkszählung 2020
Starten Sie den Webserver im aktuellen Verzeichnis
Ich habe den asynchronen Server von Django 3.0 ausprobiert
[Zabbix] Beinhaltet die Antwortzeit der Webüberwachung Bilddateien usw.?
Ändern Sie den Ziel-Batfish-Server von Pybatfish
Veröffentlichen Sie das aktuelle Verzeichnis auf dem Webserver
Starten Sie einen HTTP-Server im aktuellen Verzeichnis
[Python3] Machen Sie einen Screenshot einer Webseite auf dem Server und schneiden Sie sie weiter zu
Die Geschichte des Starts eines Minecraft-Servers von Discord
Visualisierung der Verbindung zwischen Malware und dem Callback-Server
Führen Sie einen Befehl auf dem Webserver aus und zeigen Sie das Ergebnis an
Erstellen Sie einen Webserver in der Sprache Go (net / http) (1)
Rufen Sie die URL des HTTP-Umleitungsziels in Python ab
HTTP-Server und HTTP-Client mit Socket (+ Webbrowser) - Python3
Ich habe versucht, den WEB-Server der normalen Linux-Programmierung 1st Edition mit C ++ 14 neu zu schreiben
Festkomma-Beobachtung bestimmter Daten im Web durch automatische Ausführung des Webbrowsers auf dem Server (Ubuntu16.04) (1) -Webbrowser-Installation-
Eine Sammlung von Befehlen, die Sie kennen sollten, indem Sie die Ursache für die Fehlerbehebung isolieren (Server Edition).