2016-03-01 13 views
5

Ich versuche, die E-Mail senden, wenn ein Prozess den Status in supervisord mit crashmail ändert. Da ich kein Glück mit dem Standardprogramm sendmail hatte, das ziemlich viel Setup benötigt, entschied ich mich, mit einem kleinen Skript in Python zu arbeiten, das E-Mails über SMTP versendet.Senden Sie E-Mail über SMTP in SuperLance mit Crashmail

Dies funktionierte sehr gut (ich erhielt tatsächlich eine E-Mail, die besagt, dass sich der Prozesszustand ändert) für die erste Zustandsänderung, aber hör auf, danach zu arbeiten. Ich habe versucht, verschiedene Optionen in supervisord wie buffer_size oder autorestart zu ändern, aber es hat keine Wirkung.

Hier ist das Skript Ich verwende die supervisord Zustandsänderungen auslösen:

import time 

from datetime import datetime 

if __name__ == '__main__': 
    print(">>>>> STARTING ...", flush=True) 
    while True: 
     print("sleep now:", datetime.utcnow(), flush=True) 
     time.sleep(30) 
     raise Exception("meo meo") 

Dies ist das Skript, das E-Mail über Google Mail sendet. Dieser sendet die stdin.

#!/usr/bin/env python 

import smtplib 


def get_server(): 
    smtpserver = smtplib.SMTP('smtp.gmail.com:587') 
    smtpserver.ehlo() 
    smtpserver.starttls() 
    smtpserver.login("[email protected]", "password") 
    return smtpserver 


if __name__ == '__main__': 
    import sys 

    data = sys.stdin.read() 

    s = get_server() 
    s.sendmail('[email protected]', ['[email protected]'], data) 
    s.quit() 

Hier ist meine supervisord.conf

[eventlistener:crashmail] 
command=crashmail -a -m [email protected].com -s /home/ubuntu/mysendmail.py 
events=PROCESS_STATE 
buffer_size=102400 
autorestart=true 

Hat warum eine Idee jemand? Danke!

Antwort

2

Ich zog den eventlistener Abschnitt in eine separate Datei in /etc/supervisor/conf.d (statt am Ende der supervisord.conf des Setzens) und nun wie erwartet alles funktioniert ...

+0

Das ist seltsam, eine Idee, warum es in einem sein, benötigt separate Datei so? Ich muss eine sehr ähnliche Lösung implementieren, werde aber wahrscheinlich Ruby verwenden – wired00