每周日 3 点 Apache 都会重启。问题是:服务器上有一个带有加密私钥的证书。由于自动重启时未提供密码,Apache 停止运行,我的所有网站都瘫痪了。
我想阻止 Apache 每周重新启动。怎么做?这是当时的 apache 日志。之前[notice] caught SIGTERM, shutting down
没有任何相关内容,如果您想知道...
[Sun Feb 15 03:37:12 2015] [notice] caught SIGTERM, shutting down
[Sun Feb 15 03:37:12 2015] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Sun Feb 15 03:37:13 2015] [error] Init: Unable to read pass phrase [Hint: key introduced or changed before restart?]
[Sun Feb 15 03:37:13 2015] [error] SSL Library Error: 218529960 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
[Sun Feb 15 03:37:13 2015] [error] SSL Library Error: 218640442 error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error
[Sun Feb 15 03:37:13 2015] [error] SSL Library Error: 218529960 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
[Sun Feb 15 03:37:13 2015] [error] SSL Library Error: 218595386 error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error
[Sun Feb 15 03:37:13 2015] [error] SSL Library Error: 67710980 error:04093004:rsa routines:OLD_RSA_PRIV_DECODE:RSA lib
[Sun Feb 15 03:37:13 2015] [error] SSL Library Error: 218529960 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
[Sun Feb 15 03:37:13 2015] [error] SSL Library Error: 218595386 error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error
[Sun Feb 15 11:09:41 2015] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Sun Feb 15 11:09:44 2015] [notice] Digest: generating secret for digest authentication ...
[Sun Feb 15 11:09:44 2015] [notice] Digest: done
[Sun Feb 15 11:09:44 2015] [notice] FastCGI: wrapper mechanism enabled (wrapper: /usr/sbin/suexec)
[Sun Feb 15 11:09:44 2015] [notice] FastCGI: process manager initialized (pid 11309)
[Sun Feb 15 11:09:44 2015] [notice] Apache/2.2.15 (Unix) mod_ssl/2.2.15 OpenSSL/1.0.0-fips mod_fastcgi/2.4.6 configured -- resuming normal operations
附加信息:
- 计划任务:
/usr/sbin/raid-check
这是唯一一个在周日晚上(凌晨 1 点)运行的 cron 作业,但如果我手动运行它,Apache 不会发生任何事情......
答案1
可能的原因是 logrotate 脚本中的后记。这是在 logrotation 之后运行的脚本。文件应称为 /etc/logrotate.d/apache2 或 /etc/logrotate.d/httpd(取决于 od 发行版),并看起来像:
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript
}
相关部分是“service httpd reload”。解决此问题的一种方法是删除最后 4 行(从 sharedscripts 到 endscript,包括这两行)。此外,添加 copytruncate 选项,这样您的 logrotate 脚本将变成:
/var/log/httpd/*log {
copytruncate
missingok
notifempty
}
copytruncate 将消除 apache 重新启动的需要,因为它将复制日志文件的内容,然后将其清零,因此文件描述符将保持不变,并且 apache 进程不会注意到任何变化。
要测试 logrotate,请运行:
logrotate -f /etc/logrotate.d/httpd
另外,考虑设置没有密码的私钥,因为这是不好的做法,显然你现在明白为什么了:)