天天看點

python用戶端監控工具

#coding:utf-8

import Queue,threading,time,random,getopt,sys,os

import checkdisk,checkcpu,checkmem

q = Queue.Queue(0)

NUM_WORKERS = 10

class MonitorThread(threading.Thread):

    def __init__(self,jobInput):

        self._jobq = jobInput

        threading.Thread.__init__(self)

    def run(self):

        while True:

            if self._jobq.qsize() > 0:

                try:

                    MonitorJob = self._jobq.get(False)

                    self.MonitorProcessJob(MonitorJob)

                except Queue.Empty:

                    queue_size = 0

            else:

                break

    def MonitorProcessJob(self,MonitorJob):

        doMonitorJob(MonitorJob)

def doMonitorJob(MonitorJob):

    MonitorJob.Run()

def funzionedeamon():

    q.put(checkdisk)

    q.put(checkcpu)

    q.put(checkmem)

    for x in range(NUM_WORKERS):

        MonitorThread(q).start()

def createdaemon():

    try:

        if os.fork() > 0:

            os._exit(0)

    except OSError,error:

        os._exit(1)

    os.chdir("/root/monitor/")

    os.setsid()

        pid = os.fork()

        if pid > 0:

            fd = open("/var/run/monitor.pid","w")

            fd.write(str(pid))

            fd.close()

    funzionedeamon()

def help():

    print "this script is monitor program"

    print "-h       print help information"

    print "-s       start|stop"

def startpro():

    if os.path.exists("/var/run/monitor.pid"):

        fd = open("/var/run/monitor.pid")

        pid = fd.read()

        fd.close()

        if pid.strip() == "":

            createdaemon()

        else:

            print "程序未關閉"

    else:

        createdaemon()

def stoppro():

    fd = open("/var/run/monitor.pid")

    pid = fd.read()

    fd.close()

    os.kill(int(pid.strip()),signal.SIGKILL)

    fd = open("/var/run/monitor.pid","w")

    fd.write("")

def main():

    opt,agrs = getopt.getopt(sys.argv[1:],"s:h")

    opsign = ""

    for op,value in opt:

        if op == "-h":

            help()

        elif op == "-s":

            opsign = value

    if opsign == "start":

        startpro()

    elif opsign == "stop":

        stoppro()

if __name__ == "__main__":

    main()