问题描述
我在云 (Digital Oceans) 上有一组虚拟机,如果它们闲置至少 1 小时,我想找到一种方法将它们关闭。
我想这类似于屏幕保护程序如何在指定的空闲时间后决定启动,或者某些云服务(如 SNowflake 或 Databricks)如何在一段时间未使用时关闭资源。
我检查了 w
命令,但没有找到任何可以告诉我空闲时间的信息,尽管该命令的输出有一个空闲列。
如果您知道屏幕保护程序如何启动,或者云服务如何关闭资源,请分享。非常感谢。
=== 更新 ===
运行w | awk '{if (NR!=1) {print $1,$5 }}'
后,我的输出是这样的
kha 10days
kha -
解决方法
由 w
测量的空闲时间只是表示从某个进程附加到的终端上键入内容以来的时间。如所见,例如here 这对于实际衡量用户活动是不准确的,因为他们可能只使用图形输入而不输入任何内容。
如果您的用户登录到 X11 会话,X 客户端库有自己的空闲计时器,可以查询;见例如User idle time being reset to 0 after 30 secs on Linux
云监控系统似乎会检查 CPU 负载和网络流量等内容,以决定何时将实例声明为空闲。他们可能有一个可以忽略的系统进程基线,然后在检测到非系统进程时简单地添加一个勾号。
对于您的用例,也许一个简单的网络监控工具是最容易设置的。如果您的用户始终通过 SSH 登录,请检查端口 22 上的流量;如果没有超过几分钟,则实例处于空闲状态。对于 X11 会话,可以为 X 协议流量(端口通常在 6000 以上的范围内)设置类似的内容。
,好的,我想出了一个小 shell 脚本,你可以把它放在 crontab
中,以便随时运行这个脚本 :)
尝试使用
#!/bin/bash
i="1day"
j="`w | awk '{if (NR!=1) {print $5 }}' | grep day`"
if [ $i == $j ]; then
echo "screen saver on" #command for activating screen saver
fi
P.S : 我放了 i
& j
变量以便于自定义日期和特定命令
还有屏幕保护程序命令你看到Starting screensaver from terminal