J'ai écrit un tel scénario. ** (Cependant, je ne vérifie que lorsque l'ordinateur est en marche. Dois-je l'exécuter régulièrement sur un PC qui fonctionne toute la journée ou sur un autre serveur?) **
Autre que Gmail, vous pouvez l'utiliser en modifiant le serveur SMTP et le numéro de port.
Il ne devrait pas arriver que le serveur Web soit en panne lorsque vous le remarquez, mais cela arrive occasionnellement. Je n'ai ni l'énergie ni les ressources pour présenter Zabbix, ou c'est un peu gênant, alors cette fois j'ai décidé de le vérifier régulièrement depuis mon ordinateur personnel. Au fait, j'ai essayé d'enregistrer le résultat dans le stockage local.
Dans le script ci-dessous, envoyez un HTTP GET et si vous rencontrez des problèmes, Un script Python qui vous avertira par e-mail.
Nous avons confirmé l'opération sur Python3.3 et Windows. Si vous possédez un Mac ou une autre version de Python, veuillez le réparer en temps opportun.
(Nous ne sommes pas responsables des dommages causés par l'exécution du script, veuillez donc l'utiliser à vos propres risques.)
webtest.py
#!/usr/bin/python
# coding: UTF-8
#Outil de surveillance de serveur Web
import http.client,datetime,os
#============Éléments de réglage==============
#Compte G-mail
gmail_sender = 'Avec ton [email protected]'
#Mot de passe G-mail
gmail_passwd = 'Votre mot de passe'
#Destination de l'e-mail d'erreur
gmail_to = 'Adresse e-mail Soshinsaki @'
#Sujet du courriel
mail_subject = 'Il y a une erreur de serveur'
#Serveur à vérifier
servers = ("www.Votre Saito 1.com","www.Votre site 2.net")
#Répertoire de destination de l'enregistrement du journal(Chemin relatif)
log_dir = "webtestlog"
#=================================
import smtplib
from email.mime.text import MIMEText
#envoyer un e-mail
def sendmail(data):
global gmail_sender,gmail_passwd,gmail_to,mail_subject
TEXT = data
#se connecter
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
#Le format du résultat. Si vous personnalisez cela, vous pouvez ajouter des informations plus détaillées.
def format_result(address,response):
return address +" "+ str(response.status) + " " + response.reason
#Vérifiez le répertoire racine
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()
#Vérifiez tous les serveurs ici
for each in servers:
checkroot(each)
if not os.path.isdir(log_dir):
os.mkdir(log_dir)
now = datetime.datetime.now()
#Incorporer les informations de temps
result = str(now) + "\n" + result
#Enregistrer la réponse
filename = log_dir+"\log_"+now.strftime("%y-%m-%d")+".txt";
f = open(filename, 'a') #Mode addendum
f.write(result) #résultat
f.close()
#Envoyer un e-mail en cas d'erreur
if error_detected:
sendmail(result);
En ce moment, j'ose faire une erreur dans l'URL et générer une erreur, mais si une erreur 500 se produit ou une erreur se produit lors de l'exécution de HTTP GET Vous recevrez un e-mail comme celui-ci.
Je ne pense pas que le script python puisse être exécuté directement, je vais donc créer un fichier batch. (Supposons que le script webtest.py se trouve dans C: \ bin.)
webtest.bat
cd C:\bin
python webtest.py
Si vous ne cd, vous ne trouverez pas webtest.py! Veuillez noter que l'erreur se produira.
Essayez d'exécuter le script ci-dessus une fois, et s'il fonctionne correctement, planifiez-le ensuite. Cette fois, j'ai décidé de l'exécuter régulièrement avec le planificateur de tâches Windows.
Panneau de configuration> Recherche par "Planification"> Tâche de planification
Lorsque le planificateur de tâches démarre, créez-le de manière appropriée avec "Créer une tâche de base". Gardez la gâchette «tous les jours». (Vous pouvez le changer plus tard dans un court laps de temps) Lorsque vous sélectionnez le programme, sélectionnez le fichier de commandes précédent.
Modifiez le déclencheur.
Il est bruyant d'avoir un aperçu de l'invite de commande à chaque fois, alors cachez-le.
Sur l'écran des propriétés, tapez Changer d'utilisateur ou de groupe> SYSTÈME et OK C'est OK si "Compte utilisateur utilisé lors de l'exécution de la tâche:" devient "NT AUTHORITY \ SYSTEM".
Recommended Posts