使用 Ubuntu 创建“死机”开关来关闭 EC2 实例

使用 Ubuntu 创建“死机”开关来关闭 EC2 实例

我使用 upstart 制作了一个简单的“死机开关”,在一段时间后自动关闭我的 EC2 实例。这样做是为了避免周一早上醒来后发现一个实例整个周末都在运行(是的,我可以使用云监控,但我希望有一个非常直接和简单的解决方案)。

我的问题是,如果我的 upstart 脚本很简单,是否会出现问题:

sleep +55m
shutdown -h now

我担心当关机改变运行级别时,它可能会在运行关机本身的启动进程中产生一些负面影响。

谢谢

答案1

shutdown -h now是一个非阻塞命令,因此不存在问题,因为作业在向内核发出关闭请求后立即退出。

答案2

如果你在使用当前方法时遇到问题,可以提出以下想法:

  1. 在后台抛出命令:

    (sleep +55m; shutdown -h now) &
    
  2. 告诉关机将其安排在未来 55 分钟内并将其抛到后台:

    shutdown -h +55 &
    
  3. 使用“at”来安排操作:

    echo "shutdown -h now" | at now +55min
    

笔记:对于 EBS 启动的 EC2 实例,默认的“关闭”操作就是简单地“停止”实例。如果您想要“终止”实例,则需要将实例启动的关闭行为设置为“终止”。

在 ec2-run-instances 命令行上,可以使用以下选项完成此操作:

--instance-initiated-shutdown-behavior terminate

AWS 控制台有类似的选项。

相关内容