我在 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 状态并且实例将继续运行)。