logrotate 如何与硬链接文件交互?

Sci*_*tri 6 hardlink logrotate

我有一项服务,它坚持将其日志文件保存在糟糕的位置。在改变保存它们的位置的所有努力都失败了之后,我的下一个想法是在更干净的地方创建指向这些文件的硬链接。这让我产生了一个担忧:

如果我配置 logrotate 来管理这些日志文件,它会按预期工作(轮换日志,保持我的链接工作)?还是 logrotate 会不小心断开链接,并使日志累积在其本地位置而不是我的中央位置?

我相信我可以配置 logrotate 以在必要时在轮换后重新创建硬链接。但是,有必要吗?

sys*_*138 3

要回答你的问题,这取决于你进行什么样的轮换。例如,将发生以下进展:

复制并截断方法:

  1. Logrotate 将日志文件复制到新的日志文件。
    • 新的日志文件仅显示在旧位置。
  2. Logrotate 截断旧文件。
    • 这会将两个位置的旧文件都变成零字节。
  3. 日志文件继续从应用程序填充。

这会将日志文件备份保留在旧位置。

解决此问题的方法非常简单:配置 logrotate 以在新位置轮换日志。旧的仍然会有不断增长的文件,但它只是唯一的一个。

复制并创建方法:

  1. Logrotate 将文件复制到新的日志文件。
    • 该日志文件没有硬链接,仅显示在新位置。
  2. Logrotate 删除旧的日志文件。
    • 由于硬链接,这只会删除 logrotate 运行所针对的目录中的硬链接。另一个目录仍将具有该文件的完整副本。
  3. Logrotate 创建一个新的日志文件。
    • 这不会硬链接到其他位置。

这种方法是最有问题的,你需要一些旋转后的魔法来清理它。