apache2 的 error.log 包含大量“caught SIGTERM”通知

apache2 的 error.log 包含大量“caught SIGTERM”通知

当我重新启动我的 apache 服务时,它会生成以下登录/var/log/apache2/error.log– 并且会增加的大小error.log

这是默认行为还是我缺少一些配置?

[Mon Jul 29 15:13:25 2013] [notice] Apache/2.2.22 (Ubuntu) PHP/5.4.9-4ubuntu2.2 configured -- resuming normal operations
[Mon Jul 29 15:14:24 2013] [notice] caught SIGTERM, shutting down
[Mon Jul 29 15:14:25 2013] [notice] Apache/2.2.22 (Ubuntu) PHP/5.4.9-4ubuntu2.2 configured -- resuming normal operations
[Mon Jul 29 15:14:31 2013] [notice] caught SIGTERM, shutting down
[Mon Jul 29 15:14:32 2013] [notice] Apache/2.2.22 (Ubuntu) PHP/5.4.9-4ubuntu2.2 configured -- resuming normal operations
[Mon Jul 29 15:14:59 2013] [notice] caught SIGTERM, shutting down
[Mon Jul 29 15:15:00 2013] [notice] Apache/2.2.22 (Ubuntu) PHP/5.4.9-4ubuntu2.2 configured -- resuming normal operations
[Mon Jul 29 15:15:02 2013] [notice] caught SIGTERM, shutting down
[Mon Jul 29 15:15:03 2013] [notice] Apache/2.2.22 (Ubuntu) PHP/5.4.9-4ubuntu2.2 configured -- resuming normal operations

答案1

简直SIGTERM就是POSIX 进程信号告诉系统如何停止进程;在本例中是 Apache。根据 Wikipedia 链接:

SIGTERM 信号发送给进程以请求其终止。与 SIGKILL 信号不同,它可以被进程捕获并解释或忽略。这允许进程执行良好的终止,释放资源并保存状态(如果合适)。SIGINT 与 SIGTERM 几乎相同。

这基本上意味着当您stop通过命令告诉 Apache 时:

sudo service apache2 stop

或者restart通过这个命令:

sudo service apache2 restart

实际发生的情况是init.d脚本向进程发送了一条消息SIGTERM,日志只是反映了这一点。这意味着它礼貌地要求 Apache2 停止正在执行的操作。

现在,日志的好处就是让您知道发生了什么。例如,假设您在现实世界的服务器上,并且遭受 DDoS 攻击。系统可能不堪重负,您无法caught SIGTERM, shutting down立即在日志中看到该条目。哎呀,整个“停止进程”逻辑可能会阻塞,并且永远不会显示在日志中。

该日志条目的好处是让系统确认我们确实收到了关闭 Apache 的命令,并且确实进行了关闭。

答案2

这是完全正常的,因为这是您的脚本停止 apache 的方式。

检查你的/etc/init.d/apache2/etc/init.d/httpd脚本(名称取决于操作系统),你应该看到类似这样的内容:

stop() {
        echo -n $"Stopping $prog: "
        killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}

该命令killproc向 httpd 进程发送 SIGTERM。

相关内容