httpd 的 Logrotate 配置(CentOS)

httpd 的 Logrotate 配置(CentOS)

我在 CentOS 5.5 上运行 Apache 2.2.3,刚刚注意到 /etc/logrotate.d/httpd 中有以下 logrotate postrotate 配置:

postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript

由于该脚本设置为每周运行一次,因此它会对 Apache 进行硬重载,这似乎会终止所有连接(对吗?我不是专家)。将 postrotate 脚本更改为正常重启是否更安全?

/usr/sbin/apachectl graceful > /dev/null

这是我已经为我的虚拟主机设置的后轮换行为。我不明白为什么 httpd 轮换脚本需要进行硬重新加载。

如能得到关于如何正确配置的任何建议,我们将不胜感激。

谢谢,拉尔夫

答案1

不,'/sbin/service httpd reload' 命令不会终止所有连接,因为它不会启动“硬重启”。CentOS 通过服务触发 Apache,其他操作系统通过 init 脚本触发。对于所有这些操作系统,“重新加载”意味着正常重启/向 Apache 发送 USR1 信号:

“USR1 或优雅信号会导致父进程建议子进程在处理完当前请求后退出(如果子进程没有提供任何服务,则立即退出)。父进程会重新读取其配置文件并重新打开其日志文件。当每个子进程死亡时,父进程会用新一代配置中的子进程替换它,该子进程会立即开始处理新请求。”

答案2

原始答案不正确。 initscript“reload”只是将 reload 命令传递给 apachectl。 reload 向 httpd 发送 SIGHUP,它会立即终止子进程,并且中断当前连接的客户端: http://httpd.apache.org/docs/current/stopping.html#hup

查看针对 RHEL httpd 包提交的一个错误: https://bugzilla.redhat.com/show_bug.cgi?id=480624

logrotate 脚本中不使用 graceful 的原因是无法保证子进程已经停止: http://httpd.apache.org/docs/current/stopping.html#graceful

相关内容