#!/usr/bin/python # file: check_domain_expiration.py - 20080318 # license: public domain, 20080318 # victor trac (victor.trac@gmail.com) # http://victortrac.com import os, re, commands, time, smtplib def get_domains(path): files=os.listdir(path) p = re.compile('[a-z]+[-]*(?=[a-z]|\d)\d*[a-z]*\.(com|net|org).vhost$') # modify for your convention domains = {} for file in files: m = p.search(file) if m: domains[m.group()[:-6]] = 1 return domains.keys() def check_expirations(domains): p = re.compile("[0-9]{2}-[a-z]{3}-[0-9]{4}") expiring = {} for domain in domains: expiration = commands.getoutput("whois %s | egrep -i 'Expiration|Expires on'" % domain) m = p.search(expiration) if m: expiration_date = time.mktime(time.strptime(m.group(0),"%d-%b-%Y")) now = time.time() days_left = (expiration_date - now)/86400 expiring[domain] = days_left return expiring def email_expiring(domains, days_ahead, sender, to, smtp_server): subject = "Expiring domains" headers = "From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n" % (sender,to,subject) message = headers + "" for domain in domains.keys(): days_left = domains[domain] if days_left < days_ahead: days_left = "%i" % days_left message = message + domain + " expires in " + days_left + " days\n" print message server = smtplib.SMTP(smtp_server) server.sendmail(sender,to,message) server.quit() if __name__=="__main__": days_ahead = 30 # expiration window from today sender = "apache" # mail to send from to = "you@yourdomain.com" # where the mail is going smtp_server = "localhost" # mail server vhost_path = "/var/www/vhost.d" # path to apache vhost files domains = get_domains(vhost_path) expiring = check_expirations(domains) email_expiring(expiring,days_ahead,sender,to,smtp_server)