【问题标题】:Prompt before shutting down EC2 instance关闭 EC2 实例前的提示
【发布时间】:2014-02-24 23:21:47
【问题描述】:

是否可以对 EC2 实例进行“有条件”关闭,以便关闭过程在关闭之前请求 VM 实例本身的任何登录用户确认?

我们的虚拟机实例按设定的时间表启动/停止,有时我们会因强制关闭而陷入工作中。如果我们能让关闭进程在任何活动的用户会话中提示并让用户有机会说“不,谢谢,我正在工作”来停止关闭,那就太好了。

有人知道 EC2 实例是否具有这样的功能,或者如何实现这样的功能?

【问题讨论】:

  • “时间表”实际是如何实现的?如果实例正在停止(未终止),那么是的,可能有一种有效的方法......但这取决于当前如何启动关闭。
  • 现在我们正在使用 powershell 脚本中的标准 AWS api 执行此操作,而该脚本又使用 windows 任务调度程序进行调度。
  • 实例也是Windows机器吗?
  • 是的,我们安排自动启动/停止的所有机器都是 windows 机器。

标签: amazon-web-services amazon-ec2 amazon-vpc


【解决方案1】:

我同意这将是一个很棒的功能(我现在有点想要它),但亚马逊方面没有办法做到这一点。当您停止或终止一个实例时,该实例永远不会有抱怨的机会 - 这很像拉扯电源线。

但是,根据您的评论,“我们的 VM 实例按设定的时间表启动/停止”,听起来您有一个脚本或 cronjob 在某个地方运行,它使用 AWS API 来关闭实例。

假设这一点,我建议遵循这样的路径:

  1. 编写一个客户端程序,该程序将在每个实例上运行,以侦听某个端口上的信号。
  2. 让您的自动关闭程序将该信号发送到每个实例上的该端口。
  3. 实例检查登录用户并询问他们*
  4. 如果用户回答“是”,则向主 cronjob 发送回信号,说明可以关闭。
  5. 然后通过 API 关闭实例。

当然,您可以而且应该随心所欲地处理异常(例如用户仍想工作)。


*我不知道该怎么做。

【讨论】:

  • 不错的主意,但我真的很想在不依赖客户端机器的情况下完成它。我想知道是否有内置的 windows 实用程序来提示并获得响应?
【解决方案2】:

通过介绍一下我的想法:在 EC2 中的 Linux VM 上,如果您指示系统关闭并“关闭电源”(例如,sudo halt),则不仅机器似乎这样做如您所料,实例本身实际上转换到 EC2 中的“停止”状态。

我没有在 EC2 中使用 Windows,只在 Linux 中使用,我不认为自己是 Windows 服务器专家,但假设在 Windows 实例中可以看到相同的行为集成在 EC2 中,我看到了两个看似可行的选项。

第一个选项:您的计划维护脚本可以通过远程调用 shutdown 命令来指示机器自行关闭,而不是通过 EC2 API 停止实例。

shutdown /m \\computername /s /t 600 /c "nighty night"

据我了解,这会为任何登录用户弹出警告,然后他们可以选择在 600 秒警告到期之前取消关机:

shutdown /a

可能会出现一些复杂情况,例如需要进行身份验证的方式或其他一些使此解决方案出现问题的 Windows 怪癖,但从我的角度来看,这似乎非常理想。该脚本可以继续尝试每隔一小时停止机器,或者不管频率如何,直到它发现机器实际上已经处于停止状态。

第二个选项:您不想依赖于实例本身,但是如果shutdown 的远程调用比看起来更棘手,那么计划 B 是您可以使用实例本身的任务调度程序来执行相同的功能 - 使用超时调用关闭实用程序,以便用户有时间在需要时中止。作为故障保险,如果机器没有停机,您随后仍然可以进行 API 调用,但稍后再进行,并伴随警报/警报通知您需要回退位置,这会提醒您可能是您的第一线关闭系统未按预期运行。

当然,在 Linux 中,这很容易实现为触发 shutdown 命令的 cron 作业,该命令会广播警告,并且可以类似地被具有足够权限的用户或连接的远程进程中止通过 SSH 连接到机器并按计划发出关机命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 2016-12-13
    • 2018-11-01
    • 2020-09-28
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多