脚本使用环境:Windows 用 Powershell
Linux 用 shell或python都可
#!/bin/bash
# 检测的文件
package=/data/file.index
# 记录 md5值的文件
md5=package_md5
# 创建新的md5信息
package_md5_new=$(md5sum -b $package | awk '{print $1}'|sed 's/ //g')
# 创建md5的函数
function creatmd5()
{
echo $package_md5_new > $md5
}
# 判断文件是否存在
if [ ! -f $md5 ] ; then
echo "md5file is not exsit,create md5file......."
creatmd5
exit
fi
# 读取旧的md5信息
package_md5_old=$(cat $md5|sed 's/ //g')
echo $package_md5_new
echo $package_md5_old
# 对象对比判断
if [ "$package_md5_new" == "$package_md5_old" ];then
echo "md5 is not changed"
docker restart saas
else
echo "md5 is changed"
creatmd5
bash ~/fabu.sh
fi
用python 写了简单的
# -*- coding:utf-8 -*-
import hashlib
from os import path,_exit
import time
def checkexists(file):
if path.exists(file):
return True
else:
return False
def filesave(file, data):
with open(file, 'w') as f:
f.write(data)
def filehash(file):
if checkexists(file):
filehash = hashlib.md5()
with open(file, 'rb') as f:
data = f.read()
filehash.update(data)
hashdata = filehash.hexdigest()
if not checkexists('result.txt'):
filesave('result.txt', hashdata)
else:
with open('result.txt', 'r') as data:
readdata = data.read()
if filehash.hexdigest() != readdata:
print('文件已变化', '\n时间:', time.strftime("%Y-%m-%d %X", time.localtime()), '\nhash值:', hashdata)
filesave('result.txt', hashdata)
else:
print('file is not exist')
_exit(0)
if __name__ == '__main__':
file = 'D:\\vs5ftp.txt'
while True:
filehash(file)
time.sleep(10)
程序可以监听文件夹和文件的变化,这个监听的能力是操作系统通知的,只要这个监听的程序不挂,文件一变化,程序就能立马知道,然后计算hash值即可。
你把这个当前Hash值存在一个INI配置文件或随便什么文件、数据库都行
创建一个日志文件、或者数据库创建一个日志表也可以。
用个timer隔一段时间获取文件Hash值
获取的Hash值与存储的Hash值对比,如果Hash值不一样,输出当前时间和最新Hash值到日志文件。
同时更新最新Hash值到INI配置文件或随便什么文件、数据库。
可以参照工控上plc的方式,数据一直在采集,周期0.1s甚至更短,加个文件变化的判断条件,条件成立就输出hash值和当前时间,不成立就不输出,采集数据如果不需要记录,可以用覆盖保存就好了
刚好需要 谢谢