用户活动

用户活动

我有按小时付费的开发服务器。
有些机器一周内有几天都没有使用,有没有一种机制可以在服务器不活动的时间后将其关闭。
所谓活动,是指没有 ssh 连接、没有磁盘更改等......

谢谢

答案1

服务器是总是正在执行某些操作(写日志、运行 init 进程、内核操作等)。你实际上是在问,如何判断用户是否未使用服务器

用户活动

如果您关注用户活动,我会查看pinky命令。我建议您编写一个每小时左右运行一次的 cronjob,并解析 的输出pinky。它将向您显示任何活动 TTY 上次活动的时间以及与哪个用户一起。

$ pinky
Login    Name                 TTY      Idle   When             Where
jdoe      John Doe           ?:0       ?????  2016-07-28 13:13 :0
jdoe      John Doe           pts/1     00:14  2016-07-28 13:15 :1

套接字活动

这不太可靠,但如果您只需要知道服务器是否有外部连接(HTTP 等),您可以解析 的输出netstat -tupn。如果服务器建立了传出连接,您可能需要将其过滤掉。

除非您确切知道自己在寻找什么联系,否则我不建议这样做。如果您不是非常具体,您的误报率(和意外关机)可能会非常高。

答案2

通常现在,这基本上是通过自动缩放来完成的 - 但这更多地指的是在某些容器环境(例如 Kubernetes)中运行的容器实例(它是此类环境中的常见功能)。

您没有说明这些机器是硬件还是虚拟的。如果它们是硬件机器,那么一个比较经典的解决方案就是迁移到虚拟化环境(也许可以重复使用服务器并提高服务器密度,并可能减少服务器数量),这样当需要的主机较少时,您就可以将客户机热迁移到较少的主机上。我想 VMWare 可能已经有可以执行此操作的工具了。

但是您说过这是一个开发环境,因此我为您提供了几个潜在的解决方案。

1) 有某种东西可以简单地关闭它们并按计划启动它们;是否通过 cron 或其他企业作业计划程序激活关闭取决于您;并且您可能无法远程启动机器。您需要考虑的一个因素是,您希望机器可用于修补和策略更新。时间表也会使用户期望更加一致。如果是硬件,BIOS 设置可用于启动,或者针对您/他们的虚拟环境的脚本。

2) 由于这是一个开发环境,您可以查看 Vagrant,并从一个(可能是共享的)开发环境转移到每个开发人员工作站上的一个开发环境……不过,这可能是一个比您准备进行的更大的转变。这有点学习曲线,您可能需要增加可供开发人员使用的资源,但您的开发人员可能会抓住这个机会,这在很大程度上取决于您可能有多想接受基础设施即代码 (IaC) 的概念,以实现可重复配置的环境。

... 3)根据您的环境和开发系统的性质...我可以想象一个 HTTP 负载平衡器,当所有成员服务器都关闭时,它会将客户端重定向到一个页面,使他们能够请求启动环境。

希望这能给你带来一些有益的想法。

干杯,卡梅伦

相关内容