![使用 Ubuntu 创建“死机”开关来关闭 EC2 实例](https://linux22.com/image/837675/%E4%BD%BF%E7%94%A8%20Ubuntu%20%E5%88%9B%E5%BB%BA%E2%80%9C%E6%AD%BB%E6%9C%BA%E2%80%9D%E5%BC%80%E5%85%B3%E6%9D%A5%E5%85%B3%E9%97%AD%20EC2%20%E5%AE%9E%E4%BE%8B.png)
我使用 upstart 制作了一个简单的“死机开关”,在一段时间后自动关闭我的 EC2 实例。这样做是为了避免周一早上醒来后发现一个实例整个周末都在运行(是的,我可以使用云监控,但我希望有一个非常直接和简单的解决方案)。
我的问题是,如果我的 upstart 脚本很简单,是否会出现问题:
sleep +55m
shutdown -h now
我担心当关机改变运行级别时,它可能会在运行关机本身的启动进程中产生一些负面影响。
谢谢
答案1
shutdown -h now
是一个非阻塞命令,因此不存在问题,因为作业在向内核发出关闭请求后立即退出。
答案2
如果你在使用当前方法时遇到问题,可以提出以下想法:
在后台抛出命令:
(sleep +55m; shutdown -h now) &
告诉关机将其安排在未来 55 分钟内并将其抛到后台:
shutdown -h +55 &
使用“at”来安排操作:
echo "shutdown -h now" | at now +55min
笔记:对于 EBS 启动的 EC2 实例,默认的“关闭”操作就是简单地“停止”实例。如果您想要“终止”实例,则需要将实例启动的关闭行为设置为“终止”。
在 ec2-run-instances 命令行上,可以使用以下选项完成此操作:
--instance-initiated-shutdown-behavior terminate
AWS 控制台有类似的选项。