har*_*arp 27 logrotate apache-httpd
我使用 logrotate 来轮换 Apache 访问、错误和重写日志。我的配置文件如下所示:
/apache/*log {
compress
dateext
rotate 365
size=+300M
olddir /log/old/apache
notifempty
missingok
lastaction
/bin/apache reload
endscript
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,每当发生轮换时,都必须重新加载 Apache,因为 Apache 不会在刚刚轮换的日志文件中写入任何内容。有没有办法避免每次 logrotate 进行轮换时 Apache 重新加载?
Jen*_*y D 45
apache 需要重新加载的原因是,一旦它打开一个文件,它就会获得一个文件句柄,并且它将继续写入该文件句柄。当您移动文件时,它没有看到,它只是继续写入同一个句柄。当您重新加载时,它会再次打开文件并获得一个新句柄。
为了避免重新加载,您可以复制它并清空旧文件,而不是移动文件。这样 apache 就可以继续写入同一个文件句柄。您可以通过将选项“copytruncate”添加到 logrotate 配置文件来实现,如下所示:
/apache/*log {
copytruncate
compress
dateext
rotate 365
size=+300M
olddir /log/old/apache
notifempty
missingok
}
Run Code Online (Sandbox Code Playgroud)
我建议您使用http://cronolog.org/
这是我如何使用它:
CustomLog "|/usr/local/sbin/cronolog -S /var/log/httpd/t3.CCC.eu-access_log -P /var/log/httpd/t3.CCC.eu-access_log.prev /var/log/httpd/t3.CCC.eu-%Y.log" combined
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
41407 次 |
最近记录: |