为什么当我使用“立即关闭”时我的 ec2 实例有时不会终止?

为什么当我使用“立即关闭”时我的 ec2 实例有时不会终止?

我在 ec2 机器启动时运行用户数据脚本,该脚本在检查最后执行的命令的退出状态后关闭机器。我确认最后执行的命令成功运行,所以我不确定为什么机器没有终止。这种情况并不是每次都会发生,似乎只有在用户数据脚本快速完成时才会发生。

这是我的 bash 脚本的结尾(执行了几个命令之后):

python myscript.py
ret=$?
echo $ret
if [[ $ret -eq 0 ]]; then
    shutdown now
fi

这将产生以下输出,但不会终止实例:

0
Cloud-init v. 0.7.9 running 'init-local' at Wed, 28 Nov 2018 20:15:38 +0000. Up 11.12 seconds.
Cloud-init v. 0.7.9 running 'init' at Wed, 28 Nov 2018 20:15:41 +0000. Up 14.67 seconds.
ci-info: ++++++++++++++++++++++++++Net device info+++++++++++++++++++++++++++
ci-info:  Device   Up     Address         Mask      Scope      Hw-Address
ci-info:   lo:    True   127.0.0.1     255.0.0.0      .            .
ci-info:   lo:    True       .             .          d            .
ci-info:  eth0:   True  10.90.1.222  255.255.255.0    .    0e:c9:6e:60:5d:e8
ci-info:  eth0:   True       .             .          d    0e:c9:6e:60:5d:e8
ci-info: +++++++++++++++++++++++++++Route IPv4 info++++++++++++++++++++++++++++
ci-info:  Route    Destination     Gateway       Genmask      Interface  Flags
ci-info:    0        0.0.0.0      10.90.1.1      0.0.0.0         eth0      UG
ci-info:    1       10.90.1.0      0.0.0.0    255.255.255.0      eth0      U
ci-info:    2    169.254.169.254   0.0.0.0   255.255.255.255     eth0      UH
Cloud-init v. 0.7.9 running 'modules:config' at Wed, 28 Nov 2018 20:15:44 +0000. Up 17.35 seconds.
Cloud-init v. 0.7.9 running 'modules:final' at Wed, 28 Nov 2018 20:15:45 +0000. Up 18.45 seconds.
Connection to 10.90.1.222 closed by remote host. 20:15:46 +0000. Datasource DataSourceEc2.  Up 19.56 seconds

我正在尝试确定 Cloud-init 是否以某种方式阻止实例终止。是不是因为脚本在其他后台进程仍在初始化时就完成了?

答案1

我最近遇到了这个问题,对我有用的解决方案是将关机命令更改为明确请求关机而不是停止:

shutdown -P now

AWS 文档位于https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html说:

默认情况下,当您从 Amazon EBS 支持的实例启动关闭操作(使用诸如 shutdown 或 poweroff 之类的命令)时,该实例将停止(请注意,halt 不会发出 poweroff 命令,如果使用,实例将不会终止;相反,它会将 CPU 置于 HLT 状态并且实例将继续运行)。

相关内容