![logrotate 在后旋转和压缩之间等待多少时间](https://linux22.com/image/89087/logrotate%20%E5%9C%A8%E5%90%8E%E6%97%8B%E8%BD%AC%E5%92%8C%E5%8E%8B%E7%BC%A9%E4%B9%8B%E9%97%B4%E7%AD%89%E5%BE%85%E5%A4%9A%E5%B0%91%E6%97%B6%E9%97%B4.png)
我正在编写一个软件,当进程从 logrotate 等收到 SIGHUP 信号时,我想重新加载日志文件。问题是,在 logrotate 开始压缩轮换日志文件之前应用程序可以使用多少时间?
联机帮助页和我找到的所有参考资料都只是指出应用程序必须“立即”重新加载日志,但没有说明这是否必须在 1 毫秒或 1 秒内完成,例如。
答案1
为了安全起见:根本没有。
Logrotate 假定一旦 postrotate 命令完成,日志文件将不再被写入。有两种方法可以处理“关闭日志文件可能需要一段时间”:
- logrotate 的
delaycompress
选项推迟压缩步骤,直到下一个日志旋转调用。这样,它可能会花费下一次 logrotate 运行所需的时间(尽管这样做是一个非常糟糕的主意)。 - 您可以编写一个命令行工具来告诉守护进程关闭并重新打开日志文件,并确保此命令确实不是退出,直到守护进程确认所有日志文件都已关闭(它不需要等到它们也被重新打开,尽管这没有什么坏处)。然后人们可以使用 logrotate
postrotate
节中的这个命令行工具。