#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()
try:
pid = os.fork()
if pid > 0:
fd = open("/var/run/monitor.pid","w")
fd.write(str(pid))
fd.close()
os._exit(0)
except OSError,error:
os._exit(1)
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("")
fd.close()
def main():
opt,agrs = getopt.getopt(sys.argv[1:],"s:h")
opsign = ""
for op,value in opt:
if op == "-h":
help()
os._exit(0)
elif op == "-s":
opsign = value
if opsign == "start":
startpro()
elif opsign == "stop":
stoppro()
if __name__ == "__main__":
main()