题
我已经实现了一个日志文件,该文件将在每分钟之后存储进程的CPU和内存状态。我将文件的最大大小限制在3MB上(这足以满足我的目的)。
每分钟后,脚本将由cron工作调用,脚本将记录该分钟的详细信息, 将把文件重命名为“ log_.log”.
当大小达到“ 3MB -100字节”时,我将文件指针重置为开始,并将覆盖日志文件中的第一个条目,现在将把文件重命名为 “ log_ <0+一些偏移> .log”.
当我每分钟后重命名文件以更新文件指针位置时,这是一种好/有效的方法吗?
我不想为此目的维护多个日志文件。
对我来说,另一个选择是维护文件中的文件指针位置,但是....另一个文件!如果此选项不错的话,对维护一个不感兴趣:)
提前致谢。
解决方案
你是工程师吗?这是一些简单任务的一个很好的例子,通过一个完美工作,但 过于复杂 解决方案。
除非您输入的内容与您所取出的内容一样多,否则“在”文件中写入“在”中实际上会导致整个书写位置在您的写作位置被重写为磁盘之后。 附加量便宜得多.
重命名文件以存放指针有效 - 但这是 不是很优雅, ,并使内容更加复杂(对于一个过程,您的流程需要写入文件所在的目录的权利 - 否则,只需写入两个文件就足够了)
除非磁盘空间是一个问题(而且实际上很少是),否则您的方法的效率不如说的,否则 将所有内容附加到文件,并在文件达到最大大小时旋转. 。这样,您始终拥有最后3MB的日志可用,并且当前文件中最多3MB。它也将使文件也变得容易得多,而不是重新计算整个指针位置的内容。
更新以回答您的评论:
每分钟(甚至每一秒钟)重命名文件 不应该放慢您的系统 值得注意的是,不用担心。
我们的担忧主要是“为什么您认为您需要重命名文件”。从技术上讲,这不是更好的,从逻辑的角度来看,它不会更好,它使许多其他(未来)任务变得更加困难。您可以将文件指针存储在单独的文件中,也可以将文件指针存储在文件的末尾,并且更好的^H^H^H^H^H^H^H^h更简单的解决方案根本不需要文件指针。
其他提示
我很困惑为什么您会重命名您的文件。这做了什么?
日志条目固定尺寸吗?还是可变尺寸?
如果条目是固定的大小,那么从一开始重新编写现有文件就没有问题:您的文件中永远不会有不完整的条目,如果您正在为文件编写计数器或时间戳,则应清楚“光标”的位置。
如果条目是可变大小,那么您可能不应从一开始就开始重新编写文件,而不会以某种方式清楚地清楚文件中的“光标”位于何处,而是写入对读取截断的日志条目有弹性的代码。
您可以重新使用现有工具,例如 rrdtool?