我看到nginx和apache在他们的日志轮换后都发送了某种形式的重载信号。为什么是这样?我想知道,因为我正在为我自己的应用程序进行设置,并且想知道如果日志在没有更新的情况下轮换,某个应用程序是否会因某些原因而挂起。
答案 0 :(得分:0)
这个问题有一个很好的答案:How to avoid apache reload when rotating logs?
他们这样做是因为当他们打开日志文件进行写入时,他们会收到一个文件句柄。移动文件时句柄不会改变,这意味着他们认为他们正在写入日志文件,但在移动文件后,他们正在写入错误的日志文件。因此,当日志旋转时,它们会正常重新加载,以确保它们正在创建一个写入正确文件位置的新文件句柄。
如果您担心自己的应用会发生什么,应该read more about logrotate,并特别注意prerotate
和postrotate
。您可以让程序在旋转日志文件时监听信号以重置日志句柄,或者您可以对建议的第一个链接执行答案,然后只复制文件并截断原始文件,这样就不会不用担心。