我有一个服务器托pipe在EC2上 。 该服务器基于CentOS基于Linux AMI构build。 它致力于一个客户端项目,我通过SSH连接。 有时,我忘了closures服务器时,不使用,从而产生不必要的成本。
如何让服务器在不活动状态下自动closures, 例如 30分钟后没有SSH连接?
当然,我正在寻找最简单的解决scheme。 一个小时左右的支票也可以,只是可靠的工作。
自2013年1月起, Amazon CloudWatch提供了使用Amazon CloudWatch检测和closures未使用的Amazon EC2实例的选项 ,有关此function的详细信息,请参阅Amazon CloudWatch – Alarm Actions的介绍性博客文章:
今天,我们正在给您提供在发生CloudWatch警报时 停止或终止您的EC2实例的function 。 您可以将其用作故障安全(检测到exception情况,然后执行操作)或作为应用程序处理逻辑的一部分(等待预期条件,然后执行操作)。 [强调我的]
您的用例在Failsafe Ideas部分具体列出:
如果您(或您的开发人员)健忘,则可以检测未使用的EC2实例并closures它们。 您可以通过检测很长一段时间的非常低的平均负载来做到这一点。 这种types的故障安全可以用来减less你的AWS账单,确保你不支付你实际没有使用的资源。
如上所述,这取决于是否能够启发式地检测触发警报和停止实例的适当条件 – 您可以通过将自定义指标发布到CloudWatch,基于login的SSH用户数,空闲时间或否则,依次获得所需检测和closures过程的更多控制/精度。
如果你正在寻找的是在login时保持服务器运行,而你的会话闲置的时间less于n单位,你可以通过你提到的cron脚本来完成, w(1)报告login用户的IDLE时间,您可以使用。
您可以在使用类似命令的实例本身上创build一个cron作业脚本
netstat | grep ssh | grep ESTABLISHED
如果没有返回结果,则将其写入文件,然后cron再次尝试,如果不再返回结果,则脚本运行此操作。
/sbin/shutdown -h now