我正在编写一个 Log Unifier 程序。也就是说,我有一个生成日志的系统:my.log、my.log.1、my.log.2、my.log.3...
我希望在每次迭代中存储我从某个文件中读取的行数,以便在下一次迭代中 - 我可以从那个地方继续阅读。
问题是当文件已满时,它们会滚动:最后一个日志被删除...... my.log.2 变为 my.log.3 my.log.1 变为 my.log.2 my.log 变为 my.log .1 并创建一个新的 my.log
我当然可以使用 inode 跟踪它们——这几乎是与文件的一对一对应。
我说“几乎”,因为我担心以下情况:在我的两次迭代之间 - 一些文件被删除(假设日志记录非常快),然后是新文件被创建并且一些文件的 inode 刚刚被删除。现在的问题是 - 我会将这些文件误认为是旧文件 - 并从第 500 行(例如)而不是 0 开始读取。
所以我希望找到一种方法来解决这个问题——这里有几个我想到的方向——可以帮助你帮助我:
除 inode 之外的另一个 1 对 1 对应关系。
标记文件的能力。我考虑过使用 chmod +x 将文件标记为现有文件,对于没有这些权限的新文件-我会知道它们是新的-但是如果有人要手动更改权限,那会混淆我的程序. 所以如果你有任何其他的方法来标记。
我考虑过创建指向文件的软链接,当文件被删除时会被删除。这样我就可以知道哪些文件被删除了。
任何获取“创建日期”的方法
想到的任何想法——也许以某种巧妙的方式使用时间戳、atime、ctime、mtime——一切都会很好,只要它们能让我知道哪些文件是新的,或者任何创建一对一文件的想法文件的对应关系。
谢谢