在debian挤压的日志转换期间,每个周日晚上,当postlogrotation尝试重新加载configuration,和/或重新启动apache时,apache崩溃。 我甚至尝试通过硬重新启动(停止启动)服务来重新configurationlogrotation,同样的错误。
发生了什么是apache似乎开始正常,但每个请求在apaches error.log中引发以下错误:
[notice] child pid xxxx exit signal Segmentation fault (11)
如果我再次手动重新启动Apache,它再次正常工作。 有谁知道为什么会发生这种情况?
AWS实例正在运行debian squeeze,apache 2.2.16,php 5.4.32和varnish 3(如果有的话)。
任何build议是非常受欢迎的。 如果我错过了相关的信息,告诉我!
更新:我将Magento网站移到另一台服务器,并且问题停止发生(即使还剩下一些其他网站),并且在新的服务器上没有发生。 关于是什么原因引发的想法还很less。
这样的失败可能会有不同的原因,而不是假设的东西,我build议你花一点时间去debugginglogrotate脚本,然后用apache的coredump来分析gdb的问题。
您可以像这样在详细模式下手动运行logrotate脚本(-v verbose,-f force):
logrotate -vf /etc/logrotate.d/apache2
为了制作一个cordump并用gdb分析它,你可以使用apt-get安装所有必要的软件包,configuration起来不是很困难。
安装gdb和必需的符号文件::
apt-get install gdb apt-get install apache2-dbg php5-dbg
在Apacheconfiguration中设置CoreDumpDirectory :
CoreDumpDirectory /tmp/apache2-coredump
将ulimit设置为无限制:
ulimit -c unlimited
你可以像这样用gdb读取coredump:
gdb apache2 -core /tmp/apache2-coredump/core
下面是详细的操作方法: 如何找出导致Apache分段错误的原因
在你的apacheconfiguration中使用rotatelogs改变旋转方法:
CustomLog "|bin/rotatelogs -l /var/logs/logfile.%Y.%m.%d 86400" common
rotatelogs将做日志旋转,所以不再需要优雅。
你的cron只需要压缩旧的日志。
文档: https : //httpd.apache.org/docs/2.2/programs/rotatelogs.html
PS:我知道这并不能解释为什么你有分段错误,但是用这种方法在旋转过程中不会有优雅的地方。