0

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

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

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

4

2 回答 2

0

通过介绍我的想法:在 EC2 中的 Linux VM 上,如果您指示系统关闭并“关闭电源”(例如,sudo halt),不仅机器看起来像您期望的那样,实例本身实际上转换到 EC2 中的“停止”状态。

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

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

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

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

shutdown /a

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

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

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

于 2014-02-24T15:21:47.943 回答
0

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

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

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

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

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


*我不知道该怎么做。

于 2014-02-21T03:22:11.187 回答