我希望我的家用 GNU/Linux 服务器在 30 分钟不活动后关闭。对于“活动”,我想
- 任何新的 [CUPS] 打印作业
- 对本地运行的 Apache 服务器的任何请求
- 除登录失败外,通过 SSH 进行的任何活动
如果发生任何这些情况,我希望重置 30 分钟倒计时。
前两个似乎相当可行。我可以写一个长时间运行的 Python 或 Bash 程序,
- 耐心等待30分钟发出
shutdown -h now
- 监控 CUPS 和 Apache 访问日志的文件大小,在检测到任何文件增长时重置计时器
但我不太确定如何跟踪 SSH 活动。有没有比较简单的方法可以做到这一点?我对处理 libpcap 或其他东西不太感兴趣,除非它非常简单。
另一个让我印象深刻的想法是,这可能具有普遍用途,因此也许我会制作一些可扩展的东西并将其作为免费软件发布。
我不确定这是否相关,但有问题的服务器正在运行 Ubuntu 10.04.4 LTS。
我的问题类似于这个,除了活动检测。
答案1
不要编写长时间运行的程序。使用 cron 每五分钟左右运行一次脚本来创建一个半小时前的文件(使用 touch 命令),然后检查各个日志文件是否比该参考文件更新(使用 test 命令)。
也许在您的系统中,sshd 会(通过 syslog)记录到该/var/log/messages
文件中。这不符合您的目的,因为许多其他内容也会记录在那里,因此您可能需要进行编辑,/etc/syslog.conf
以便 sshd 也会记录到您可以监控的专用日志文件中。
您可能还应该在关闭电源之前检查是否有人登录。(并且根据您使用 ssh 的目的,这可能对 ssh 也足够了,在这种情况下,您无需担心 sshd 日志。)
如果有人发现这有用我会感到惊讶。
答案2
午睡是一个提供此类功能的项目。遗憾的是,这些条件不易扩展,因此,如果它提供的条件不符合您的要求,您要么需要修改代码,要么寻找其他东西。
答案3
您可以使用netstat -p
来查找与 sshd 相关的连接(如果在足够的权限级别下运行,例如 root),并且有一个 Apache 诊断页面(由 mod_status 启用),它可以告诉您服务器是否正在执行某项操作(您可以删除对页面的访问日志并将其锁定为仅来自本地主机的请求)。我相信 CUPS 也有一个 HTTP 可访问的诊断,例如活动作业列表(或者只是使用lpq -a
)。