在我工作的系统中,有几个进程偶尔会写入某个文件(我们可以将其视为一种日志,尽管它不完全是日志)。不幸的是,它们都写入相同的输出文件,即它们会覆盖它;我无法控制它们的这种行为。为了便于讨论,我们假设写入是分离的,并且没有竞争;甚至写入之间至少有一点时间,以便可以对文件进行一些操作。
现在,我想保留此文件的所有版本(找不到更好的词来表达)。本质上,我想在每次发生写入时“抓取”一份副本,并使用合理的额外标识符(例如写入开始的时间、版本索引或其他)将其保存在其他地方。
首先,我想知道这是一项常见的系统管理任务,还是某种深奥的东西。这有点让人想起日志轮换,但并不完全相同,因为日志会被附加到其中。不过,获取和维护文件的早期版本是类似的。
其次,假设我必须自己实现这一点 - 我该如何“挂钩”到正在打开和关闭的文件上?我不想用fuser
哪怕 1/n 秒的时间来轮询它 - 这似乎太过分了。或者 - 也许你会推荐另一种方法来做到这一点?
答案1
您正在寻找的钩子名为通知。
它是一个用于监控文件系统事件的 Linux 子系统,大约 15 年前推出(并不新鲜)。一个好的起点是inotify 工具 wiki。