Apache 平稳重启失败,且无任何错误

Apache 平稳重启失败,且无任何错误

我正在编写一个脚本,每小时在 AWS Elastic Beanstalk 应用程序中正常重启 Apache。这是必要的,以便加载新的 SSL 证书。该应用程序为多个域上的多个网站提供服务,因此每个网站都需要自己的证书和配置文件。如果没有新文件,则重新启动运行正常,网站仍可运行。如果有新文件(cron 作业从 S3 存储桶下载文件),网站就会关闭,而 apache 日志中没有任何关于它为何关闭的信息。

这是脚本:

#!/bin/bash
exec 3>&1 1>>/var/log/httpd/cert-sync.log 2>&1
# start
echo "[$(date)]: ----------- Start Sync-----------"

echo "[$(date)]: Syncing certs..."
aws s3 sync s3://s3.bucket/certs /etc/pki/tls/

echo "[$(date)]: Syncing conf..."
aws s3 sync s3://s3.bucket/conf /etc/httpd/conf.d/ssl-vhosts/

echo "[$(date)]: Attempting Apache graceful restart..."
sudo /etc/init.d/httpd graceful

exit 0

这是日志中的结果:

[Sat Jul  6 21:24:01 UTC 2019]: ----------- Start Sync-----------
[Sat Jul  6 21:24:01 UTC 2019]: Syncing certs...
[Sat Jul  6 21:24:01 UTC 2019]: Syncing conf...
[Sat Jul  6 21:24:01 UTC 2019]: Attempting Apache graceful restart...
Equivalent Upstart operations: start httpd, stop httpd, restart httpd, status httpd
Gracefully restarting httpd
[OK]
[Sat Jul  6 21:27:01 UTC 2019]: ----------- Start Sync-----------
[Sat Jul  6 21:27:01 UTC 2019]: Syncing certs...
[Sat Jul  6 21:27:01 UTC 2019]: Syncing conf...
[Sat Jul  6 21:27:01 UTC 2019]: Attempting Apache graceful restart...
Equivalent Upstart operations: start httpd, stop httpd, restart httpd, status httpd
Gracefully restarting httpd
/etc/init.d/httpd: line 60: kill: (10478) - No such process
Stopping httpd
stop: Unknown instance: 
Starting httpd
httpd start/running, process 14139
[OK]

它总是以消息 结尾[OK]。 中没有任何内容/var/log/httpd/error_log。 第一次它似乎重新启动正常,但事实并非如此。 脚本的第二次运行没有找到运行 apache 的进程,因此它尝试启动它,但它也失败了。 从 AWS 控制台重新启动应用服务器也无法解决问题。

这是运行 Amazon Linux 2017.03 的。如果我将新更新推送到应用程序,则服务器实例将重建,下载所有文件(通过.ebextension不在 cron 中运行但在应用服务器运行之前运行的程序)并启动 apache,一切正常,所以我知道这不是配置文件中的错误。就目前情况而言,每当下载新证书时,使其工作的唯一方法是将更新推送到 elastic beanstalk,但我只需要按计划重新启动。

我已尝试使用这些命令来重新启动 apache:

sudo initctl restart httpd
sudo service httpd restart

我想httpd configtest在运行平稳重启之前运行并记录结果,但是我得到了这个:

[Sat Jul  6 21:29:01 UTC 2019]: ----> sudo /etc/init.d/httpd configtest
Equivalent Upstart operations: start httpd, stop httpd, restart httpd, status httpd
Usage:  {start|stop|restart|status|graceful}

这意味着它没有运行,并且 upstart 文件未配置为运行 configtest。我还没有找到在重新启动之前检查配置的方法,以查看文件在与 cron 同步时与实例启动时的 .ebextension 同步时是否有任何不同。

我还在以下位置发现了这一点/var/log/messages

Jul  6 19:53:01 ip-172-31-0-244 init: httpd main process ended, respawning
Jul  6 19:53:01 ip-172-31-0-244 init: httpd main process ended, respawning
Jul  6 19:53:01 ip-172-31-0-244 init: httpd main process ended, respawning
Jul  6 19:53:01 ip-172-31-0-244 init: httpd main process ended, respawning
Jul  6 19:53:01 ip-172-31-0-244 init: httpd main process ended, respawning
Jul  6 19:53:01 ip-172-31-0-244 init: httpd main process ended, respawning
Jul  6 19:53:01 ip-172-31-0-244 init: httpd main process ended, respawning
Jul  6 19:53:01 ip-172-31-0-244 init: httpd main process ended, respawning
Jul  6 19:53:01 ip-172-31-0-244 init: httpd main process ended, respawning
Jul  6 19:53:01 ip-172-31-0-244 init: httpd main process ended, respawning
Jul  6 19:53:02 ip-172-31-0-244 init: httpd respawning too fast, stopped

也许 Upstart 正在尝试在优雅重启完成之前重生 httpd?我不知道我在这里说什么,但那里可能有事。

这是 upstart 的配置文件:

[Sat Jul  6 21:58:01 UTC 2019]: ----> cat /etc/init/httpd.conf
# apache2 - http server
#
# Apache is a web server that responds to HTTP and HTTPS requests.
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog

description "apache2 http server"

start on runlevel [2345]
stop on runlevel [!2345]

# Give up if restart occurs 10 times in 30 seconds.
respawn limit 10 30

script
    . /opt/elasticbeanstalk/support/envvars
    if [ -f /etc/elasticbeanstalk/set-ulimit.sh ]; then
        . /etc/elasticbeanstalk/set-ulimit.sh
    fi
    # Output to standard out for upstart and to the error_log
    /usr/sbin/httpd -D FOREGROUND | tee /var/log/httpd/error_log
end script

respawn

我是 Upstart 的新手,所以我不确定是否有什么东西可能导致了此问题。

我知道这信息量很大,但我希望我已经提供了足够的背景信息。有人知道可能发生了什么吗?

答案1

您应该排除 cron 问题。脚本在 cron 之外的交互式 bash shell 上是否能正常运行?

cron 删除了很多东西:

相关内容