use*_*640 2 logging apache-2.2
有人告诉我,由于我们的日志轮换,我们的(脚本化的)每日 apache 重启已经设置。令人担忧的是,如果 logrotate 在 apache 运行并接受请求时旋转,它可能会在访问日志中丢失一行。
有人能告诉我这是合理的、真实的还是完全是胡说八道?
您需要在日志轮换后重新启动服务器,因为 Apache 保持打开日志的文件句柄,如果不这样做,将继续写入旧的日志文件。将 USR1 发送给父级(正常重启)应该可以解决问题。
引用自 2.2 文档:
即使在中等繁忙的服务器上,日志文件中存储的信息量也非常大。访问日志文件通常每 10,000 个请求增长 1 MB 或更多。因此,有必要通过移动或删除现有日志来定期轮换日志文件。这不能在服务器运行时完成,因为 Apache 将继续写入旧日志文件,只要它保持文件打开。相反,必须在移动或删除日志文件后重新启动服务器,以便打开新的日志文件。
通过使用正常重启,可以指示服务器打开新的日志文件,而不会丢失来自客户端的任何现有或挂起的连接。但是,为了实现这一点,服务器必须在完成旧请求的服务后继续写入旧日志文件。因此,在对日志文件进行任何处理之前,必须在重新启动后等待一段时间。一个典型的简单旋转日志并压缩旧日志以节省空间的场景是:
mv access_log access_log.old
mv error_log error_log.old
apachectl graceful sleep 600
gzip access_log.old error_log.old
Run Code Online (Sandbox Code Playgroud)
另一种执行日志轮换的方法是使用管道日志,如下一节所述。
| 归档时间: |
|
| 查看次数: |
267 次 |
| 最近记录: |