我下面写了一个超时处理脚本,主要用来超时处理nfs服务挂死的情况,如果检测到挂载超时,就会执行sys.exit(1)报错退出:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os,os.path,sys,commands,signal,time
class MountExcepition(Exception):
def __init__(self,value):
self.value = value
def __str__(self):
return repr(self.value)
#设置命令超时
class TimeOutException(Exception):
pass
def setTimeout(num, callback):
def wrape(func):
def handle(signum, frame):
raise TimeOutException("运行超时!")
def toDo(*args, **kwargs):
try:
signal.signal(signal.SIGALRM, handle)
signal.alarm(num)#开启闹钟信号
rs = func(*args, **kwargs)
signal.alarm(0)#关闭闹钟信号
return rs
except TimeOutException, e:
callback()
return toDo
return wrape
if __name__ == '__main__':
def doSome():
sys.exit(1)
@setTimeout(8,doSome)
#nfs服务检查函数
def check_task():
try:
cmd = "ls -l /nfs_5580_check"
(status,output) = commands.getstatusoutput("%s" %cmd)
if status != 0:
raise MountExcepition(output)
except MountExcepition as e:
print "fail"
sys.exit(1)
else:
print "success"
check_task()