您的位置:首页 > 运维架构

监控文件是否更新,MD5连续三次一致后状态调回正常

2015-08-04 14:24 363 查看
#!/usr/bin/env python
#coding:utf-8
#create by 、矿泉水 2015/8/4
import os,sys,hashlib
#检测输入参数是否满足执行条件
def Value():
if len(sys.argv) == 2:
pass
else:
print 'Usage: %s <monitor file path>'%(sys.argv[0])
exit(2)
Value()
CURRENT_FILE_NAME = os.path.basename(sys.argv[1])
#当前文件的MD5值
FILE_NAME = sys.argv[1]
FILE_NAME = open(FILE_NAME)
FILE_NAME_READ = FILE_NAME.read()
NOW_FILE_NAME = hashlib.md5(FILE_NAME_READ)
CURRENT_FILE_MD5 = NOW_FILE_NAME.hexdigest()
FILE_NAME.close()
#追加当前md5值至/tmp/check_file_notupdate_current_file_md5_xxx文件
def AddMd5():
CURRENT_MD5 = open('/tmp/check_file_notupdate_current_file_md5_%s'%CURRENT_FILE_NAME,'a+')
CURRENT_MD5.write(CURRENT_FILE_MD5)
CURRENT_MD5.write('\n')
CURRENT_MD5.close()
#打开/tmp/check_file_notupdate_current_file_md5_xxx文件
def OpenMd5():
CURRENT_MD5 = open('/tmp/check_file_notupdate_current_file_md5_%s'%CURRENT_FILE_NAME)
CURRENT_MD5_READ = CURRENT_MD5.read()
CURRENT_MD5_READ = CURRENT_MD5_READ.split()
CURRENT_MD5.close()
CURRENT_MD5 = open('/tmp/check_file_notupdate_current_file_md5_%s'%CURRENT_FILE_NAME)
NOW_CURRENT_MD5 = CURRENT_MD5.read()
NOW_CURRENT_MD5 = NOW_CURRENT_MD5.split()
if len(NOW_CURRENT_MD5) < 3:
AddMd5()
print 'WARNING: file has been updated'
exit(2)
else:
#比对文件最后三个值的内容是否一致,如果一致则清空文件并返回正常状态,如果不一致则返回异常状态
VALUE = NOW_CURRENT_MD5[-1] in NOW_CURRENT_MD5[-2] in NOW_CURRENT_MD5[-3]
if VALUE == True:
CURRENT_MD5 = open('/tmp/check_file_notupdate_md5_%s'%CURRENT_FILE_NAME,'w')
CURRENT_MD5.write(NOW_CURRENT_MD5[-1])
CURRENT_MD5.write('\n')
CURRENT_MD5.close()
CURRENT_MD5 = open('/tmp/check_file_notupdate_current_file_md5_%s'%CURRENT_FILE_NAME,'w')
CURRENT_MD5.write(CURRENT_FILE_MD5)
CURRENT_MD5.write('\n')
CURRENT_MD5.close()
if NOW_CURRENT_MD5[-1] == CURRENT_FILE_MD5:
print 'OK: File is not updated'
exit(0)
else:
print 'WARNING: file has been updated'
exit(2)
elif VALUE == False:
AddMd5()
print 'WARNING: file has been updated'
exit(2)
#判断/tmp/check_file_notupdate_md5_xxx文件是否存在,不存在则新建
def OpenFile():
FILE_PATH = os.path.exists(r'/tmp/check_file_notupdate_md5_%s'%CURRENT_FILE_NAME)
if FILE_PATH == True:
pass
elif FILE_PATH == False:
print 'ERROR: /tmp/check_file_notupdate_md5_%s File does not exist, have to help you create, the next operation to read data, please run again'%CURRENT_FILE_NAME
FILE_MD5 = open('/tmp/check_file_notupdate_md5_%s'%CURRENT_FILE_NAME,'w')
FILE_MD5.close()
exit(2)
OpenFile()
#判断/tmp/check_file_notupdate_md5_xxx文件是否有数据,如果没有数据追加当前文件的MD5值至文件
def CurrentMd5():
FILE_MD5_OPEN = open('/tmp/check_file_notupdate_md5_%s'%CURRENT_FILE_NAME)
FILE_MD5 = FILE_MD5_OPEN.read()
FILE_MD5_OPEN.close()
if len(FILE_MD5) != 0:
pass
else:
FILE_MD5_OPEN = open('/tmp/check_file_notupdate_md5_%s'%CURRENT_FILE_NAME,'w')
FILE_MD5_OPEN.write(CURRENT_FILE_MD5)
FILE_MD5_OPEN.write('\n')
FILE_MD5_OPEN.close()
print 'ERROR: /tmp/check_file_notupdate_md5_%s The file is empty, has upped the MD5 value of the current file into, please run again'%CURRENT_FILE_NAME
exit(2)
CurrentMd5()
#判断/tmp/check_file_notupdate_current_file_md5_xxx文件是否存在,不存在则新建
def CurrentMd5File():
FILE_PATH = os.path.exists(r'/tmp/check_file_notupdate_current_file_md5_%s'%CURRENT_FILE_NAME)
if FILE_PATH == True:
pass
elif FILE_PATH == False:
print 'ERROR: /tmp/check_file_notupdate_current_file_md5_%s File does not exist, have to help you create, the next operation to read data, please run again'%CURRENT_FILE_NAME
CURRENT_MD5 = open('/tmp/check_file_notupdate_current_file_md5_%s'%CURRENT_FILE_NAME,'w')
CURRENT_MD5.close()
exit(2)
CurrentMd5File()
#文件存储的上一次MD5值
FILE_MD5_OPEN = open('/tmp/check_file_notupdate_md5_%s'%CURRENT_FILE_NAME)
FILE_MD5 = FILE_MD5_OPEN.read()
FILE_MD5 = FILE_MD5.split()[0]
FILE_MD5_OPEN.close()
if FILE_MD5 == CURRENT_FILE_MD5:
print 'OK: File is not updated'
exit(0)
else:
OpenMd5()

本文出自 “、矿泉水” 博客,请务必保留此出处http://guwenqiang.blog.51cto.com/5462040/1681574
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: