我在 AWS 中运行了一些 ec2 实例,这些实例通过自动缩放策略进行缩放,一切都很好,机器可以很好地进行扩展和缩小。然而,我们遇到的一个问题是,当它缩小规模时,正在处理的请求(即将终止)实例会在终止发生时中途丢失。
我想要做的是捕获关机信号,并要求 apache 正常关机,然后让关机继续。
答案1
我已经找到了它,它是一种黑客手段,但对我来说似乎有用。
当系统收到关机信号时,将执行文件夹 /etc/rc0.d 中的脚本,其中涉及关闭包括 Apache 在内的所有服务的脚本;如果脚本关闭时间过长,AWS 将关闭电源,我不知道多长时间才算太长。
无论如何,这就是我所做的,我编辑了 /etc/rc0.d/K09apache2 文件
在 apache_stop 函数 apache_stop() {
if $APACHE2CTL configtest > /dev/null 2>&1; then
# if the config is ok than we just stop normaly
#$APACHE2CTL stop 2>&1 | grep -v 'not running' >&2 || true
echo "stopping the apache gracefully"
$APACHE2CTL -k graceful-stop 2>&1 | grep -v 'not running' >&2 || true
sleep 15
将突然停止改为正常停止,并休眠 15 秒以确保它确实正常停止。
更新 - 现在,Amazon ELB 提供了正常删除实例的功能。