在关闭EC2实例之前提示

时间:2014-02-21 03:16:40

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

是否可以使用EC2实例执行“条件”关闭,以便关闭进程在关闭之前请求来自VM实例的任何已登录用户的确认?

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

任何人都知道EC2实例是否具有此类功能,或者如何完成此类功能?

2 个答案:

答案 0 :(得分:0)

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

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

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

  1. 编写一个客户端程序,该程序将在侦听某个端口上的信号的每个实例上运行。
  2. 让您的自动关机程序将该信号发送到每个实例上的该端口。
  3. 实例检查已登录的用户并询问他们*
  4. 如果用户回答是,请向主cronjob发送一个信号,表示可以关闭。
  5. 然后通过API关闭实例。
  6. 当然,您可以而且应该处理异常(例如用户仍然想要工作)但是您可以随时使用。


    *我不知道该怎么做。

答案 1 :(得分:0)

通过介绍我的想法:在EC2中的Linux VM上,如果你指示系统关闭并且'#34;关闭电源" (例如,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就是您可以使用任务调度程序实例本身执行相同的功能 - 使用超时调用shutdown实用程序,以便用户有时间在需要时中止。作为故障保护,如果机器没有关闭,您可以随后进行API调用,但是稍后再进行,并伴有警报/警报,通知您需要后备位置,这将是提醒您,您的一线停机系统可能没有按预期运行。

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