问题:我想确保某个文件夹在我的各个服务器上的内容是相同的。
我不希望自动文件同步来保持它们相等,而是手动进行更改。
我最初的想法是每天计算一次文件夹上的一些 crc/hash 并发送给 Zabbix,并在值不同时触发。
有没有什么好的工具可以计算文件夹的 crc 或类似信息?
有谁知道其他可以解决我的问题的解决方案吗?
答案1
不久前我遇到了完全相同的问题,并编写了这段 Python 代码来生成校验和:
def checksum(root):
md5sums = {}
items = os.path.walk(root, checksum_dir, md5sums)
_md5sums = []
for k in sorted(md5sums.keys()):
_md5sums += md5sums[k]
return md5.new(''.join(_md5sums)).hexdigest()
def checksum_dir(md5sums, path, names):
names.sort()
if '.git' in names:
names.remove('.git')
md5sums[path] = []
for name in names:
name = os.path.join(path, name)
if os.path.islink(name):
md5sums[path].append(os.readlink(name))
elif os.path.isdir(name):
continue
elif os.path.isfile(name):
fd = open(name)
md5sums[path].append(md5.new(fd.read()).hexdigest())
fd.close()
else:
raise ValueError("File %s is not a normal name or a symlink")
我把它包装在一个func模块中,并通过nrpe在funcmaster上触发相关检查(我们使用nagios,而不是zabbix)。
答案2
您需要的两个选项是:tripwire (3070678sourceforge.net/projects/tripwire/) 和 Aide (http://aide.sourceforge.net/)。
两者的工作流程大致相同,但由于我了解 Aide,所以我将向您介绍这些。首先,使用要监视的每个文件的总和(MD5 和 SHA1)初始化 DB。Aide 允许您选择要监视的更改:文件的内容、uid 或 gid、执行位、块计数...然后,每天将监视的文件的当前状态与 DB 中的文件状态进行比较。如果有任何差异,Aide 会告诉您。每当您进行受控更改时,您都会再次初始化 DB。
与 Zabbix 或 Nagios 集成并不是很好,但也许有帮助。
答案3
如果您仍在寻找一种可以比较多个服务器之间的差异并在出现任何差异时发送警报的工具,请访问 www.metaforsoftware.com。您可以将其设置为每日或每小时比较差异。它现在处于免费测试阶段。(全面披露:我是联合创始人)