我每周只有几天每天真正使用服务器几个小时。
它是一个备份服务器,它向客户端请求备份数据。
该部分已得到处理,它通过预定的魔术包唤醒并执行其操作。这都很好。我可以唤醒它以在计划外使用它,这也很好。
我怎么让它知道网络有一段时间没有被使用并让自己进入睡眠状态?我想要记录的网络流量是 SSH、SFTP、rsync 和来自 Canonical 的更新。所有其他流量只是我不在乎的喋喋不休。
我想将以下伪代码作为 cron 脚本放入......每 15 分钟左右检查一次。我不担心添加 cron 功能,我对此充满信心。
if [ lastSignificantNetworkActivity > 3h ] { hibernate }
我可能有 X->Y 问题。我只想让我的服务器在通常的 18 小时内处于低功耗保存到磁盘状态,否则它什么也不做。我认为网络活动是一个很好的测试指标。我愿意接受更发达和更强大的解决方案或固有的服务器属性来检查是否存在。
(我不确定每天的电源循环是否会比 ZFS 整天运行数据完整性检查的持续磨损更糟……只是不确定。)
找出 SSH 会话产生的网络流量迹象的一种可能实现是通过防火墙规则:
该方法还可以检测 SFTP 和 RSYNC 生成的流量,因为这两个应用程序都通过 SSH 协议运行。
更新活动的检测很难通过防火墙执行,因为包下载使用 FTP、HTTP 和 HTTPS 协议,并且需要调整防火墙规则以区分软件更新和记录的 HTTP 流量。因此,我的建议是通过检查和的修改时间
/var/lib/apt/lists
来检测软件更新。/var/cache/apt/archives
/var/lib/dpkg/lock
我的实施方案如下:
这些命令行设置
iptables
和ip6tables
规则。这是等效的设置
nftables
:这是一个监控脚本的模板。该
getStats
功能应根据使用的防火墙进行调整。可怕的想法时间!让我们自己动手吧!
过期被忽略的 SSH 会话
安装休眠
设置系统范围的日志格式,以备不时之需
启动一个 cron 任务!
现在,拼凑在一起很糟糕:
不要忘记更改权限