如果有人可以帮我修改下面的脚本。我正在尝试使用Python脚本来检查 文件系统上的磁盘空间警报,但现在脚本只检查根“/”文件系统。我想用脚本检查服务器上可用的所有文件系统。这是一个nagios文件系统磁盘空间,脚本只检查“df /”。如果任何人可以帮助找到解决方案。
#!/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 :(得分:0)
Nagios已经附带了文件系统磁盘空间检查。我的第一个建议就是使用它。
要回答您的具体问题,脚本正在运行“df /”,因此您只能获得该文件系统的结果。
为什么不只运行“df”,它会返回多行,然后你可以循环?
您也可以考虑在原生python中编写它:
s = os.statvfs('/')
(s.f_bavail * s.f_frsize) / 1024
答案 1 :(得分:0)
您的查询返回/
的结果,因为在command="df /"
语句
你可以:
a)替换/
中command="df /"
的命令行选项,以便您选择分区
b)制作明确查看不同分区/, /home, /var
等的多个版本
c)使用内置的nagios
d)将它写在shell / awk中,因为你只想评估shell命令的输出