2014-12-19 45 views
1

如果有人可以帮我修改下面的脚本。我试图使用Python脚本检查文件系统上的磁盘空间警告 ,但是现在脚本只检查根“/”文件系统。我会用脚本检查服务器上可用的所有文件系统。这是一个nagios文件系统磁盘空间,脚本只检查“df /”。如果有人能帮助找到解决办法。使用python的可用磁盘Nagios插件

#!/usr/bin/python 
import re,sys,commands 

################# 
#Set variables 
command = "df /" 
critical = 95.0 
warning = 75.0 
################# 

#build regex 
dfPattern = re.compile('[0-9]+') 

#get disk utilization 
diskUtil = commands.getstatusoutput(command) 

#split out the util % 
diskUtil = diskUtil[1].split()[11] 

#look for a match. If no match exit and return an 
#UNKNOWN (3) state to Nagios 

matchobj = dfPattern.match(diskUtil) 
if (matchobj): 
    diskUtil = eval(matchobj.group(0)) 
else: 
    print "STATE UNKNOWN" 
    sys.exit(3) 

#Determine state to pass to Nagios 
#CRITICAL = 2 
#WARNING = 1 
#OK = 0 
if diskUtil >= critical: 
    print "FREE SPACE CRITICAL: '/' is %.2f%% full" % (float(diskUtil)) 
    sys.exit(2) 
elif diskUtil >= warning: 
    print "FREE SPACE WARNING: '/' is %.2f%% full" % (float(diskUtil)) 
    sys.exit(1) 
else: 
    print "FREE SPACE OK: '/' is %.2f%% full" % (float(diskUtil)) 
    sys.exit(0) 

回答

0

Nagios已经带有文件系统磁盘空间检查。我的第一个建议是使用它。

要回答您的具体问题,该脚本正在运行“df /”,因此您只会获得该文件系统的结果。

为什么不运行只是“df”,这将返回多行,然后你可以循环?

你也可以考虑在本机Python写它:

s = os.statvfs('/') 
(s.f_bavail * s.f_frsize)/1024 
0

您的查询返回/的结果,因为这是明确的声明command="df /"

,你可以叫了一声:
一)替代/的命令行选项command="df /",它允许您选择分区
b)使显式查看不同分区的多个版本/, /home, /var
C)使用内置
d Nagios的),它写在壳/ AWK,因为你只是想从一个shell命令评估输出