Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- import os, smtplib
- from sys import exit
- from time import sleep, gmtime, strftime
- ########## Configuration here ##############
- processname = 'init'
- checkseconds = 5
- maxalerts = 2
- sender = 'notify@domain.com'
- receivers = ['myemail@mymail.com']
- emailpassword = 'myemailpass'
- smtpserver = 'smtp.server.net'
- logfilename = 'monitor.log'
- ########## End configuration ###########
- message = ("From: Monitor <%s>\r\nTo: Warning <%s>\r\nSubject: e-mail Alert Monitor\r\nProcess is down!" % (sender, ", ".join(receivers)))
- fail = 0
- #Crazy logger
- def writelog (message):
- global logfile
- try:
- # This tries to open an existing file but creates a new file if necessary.
- logfile = open(logfilename, "a")
- try:
- logfile.write(message)
- finally:
- logfile.close()
- except IOError:
- pass
- # Notifying via Email
- def advice():
- try:
- smtpObj = smtplib.SMTP(smtpserver, 25)
- smtpObj.login (sender,emailpassword)
- smtpObj.sendmail(sender, receivers, message)
- writelog ("%s Successfully sent email\n" % (strftime("%d %b %Y %H:%M:%S", gmtime())))
- smtpObj.quit()
- except SMTPException:
- writelog ("%s Error: unable to send email\n" % (strftime("%d %b %Y %H:%M:%S", gmtime())))
- # print ("exiting...")
- # exit (1)
- # Vicente trick of the hell
- def monitor():
- global fail
- tmp = os.popen("ps -Af").read()
- proccount = tmp.count(processname)
- if proccount < 1:
- fail = fail + 1
- writelog ('%s %s **STOPPED** (alert %d)\n' % (strftime("%d %b %Y %H:%M:%S", gmtime()), processname, fail))
- if fail == maxalerts:
- advice()
- else:
- fail = 0
- sleep(checkseconds)
- def main():
- while 1:
- monitor()
- # Dual fork hack to make process run as a daemon thanks to Active Programmer Network
- if __name__ == "__main__":
- try:
- pid = os.fork()
- if pid > 0:
- exit(0)
- except OSError, e:
- exit(1)
- os.chdir("/tmp")
- os.setsid()
- os.umask(0)
- try:
- pid = os.fork()
- if pid > 0:
- exit(0)
- except OSError, e:
- exit(1)
- main()
Add Comment
Please, Sign In to add comment