#!/usr/bin/python # # Restarts NM if NM does not respond to periodic probes. # # Faiyaz Ahmed # Copyright (C) 2006 The Trustees of Princeton University # # $Id: nm_mom.py,v 1.2 2006/08/17 20:12:09 faiyaza Exp $ # import syslog import os import sys import time import socket import xmlrpclib import bwlimit from sets import Set # Utility functions from pl_mom import * def restartNM(): try: pid = os.fork() if pid == 0: bwlimit.run("/etc/init.d/pl_nm stop") time.sleep(10) try: nmpid = bwlimit.run("/bin/ps -e -o pid,cmd | grep nm.py")[0].split(" ")[0] os.kill(int(nmpid), 9) time.sleep(3) print "NM %s forcefully killed." %nmpid except: print "NM %s killed." %nmpid bwlimit.run("/etc/init.d/pl_nm restart") print "NM restarted." os._exit(0) else: os.waitpid(pid,0) except Exception, err: print "Warning: Exception received while restarting NM: %s" % err def main(): syslog.openlog("nm_mom") sys.stdout = sys.stderr = Logger() nm = NM() last_maxrate = 0 try: # Query something. If it doesnt come back... vals = nm.query("pl_netflow", [('nm_net_max_rate', last_maxrate)]) except Exception, err: print "Warning: Exception received while querying NM:", err restartNM() if __name__ == '__main__': main()