如何判断正在运行的Linux机器是否空闲

7
我有一台笔记本电脑,大部分时间都连接着互联网,但是网络速度非常慢。当我下载一些大文件时,由于网络速度过慢,我无法浏览网站。我的计划是编写一个bash脚本并在cron作业中运行它,当它发现系统处于空闲状态时,它会自动启动一个进程(最好使用wget下载大文件),当我使用笔记本电脑时,该进程将被杀死。类似于屏幕保护程序(我在Scheduling in Linux: run a task when computer is idle (= no user input)上找到了一些方法,但我不使用屏幕保护程序,也不想依赖gnome应用程序如xscreensaver)。我使用Ubuntu Linux,有没有办法找到Linux机器的适当空闲时间。

空闲 = 没有键盘、触摸板或鼠标点击。

是否有一种方法可以以这样的方式查找网络活动,例如如果没有互联网流量,则我的脚本开始执行另一个wget脚本,如果我的浏览器请求网页,则它将停止执行脚本。

请建议我一个合适的方法...我应该使用空闲时间实现它,如果我考虑网络流量,它将更有效。


你考虑过流量整形吗? - Chen Levy
@陈,如何在本地系统上操作?我一点头绪也没有!! - Shiv Deepak
1
我想你可以像http://www.shorewall.net/simple_traffic_shaping.html中所解释的那样使用shorewall进行这个操作。 - Chen Levy
你可以使用 nice 命令以非常低的优先级一直运行你的脚本。 - stark
3个回答

3

有一种方法,但相当hacky。您可以监听适当的设备(在/dev区域内)。

例如,在我的当前计算机上:

sudo cat /dev/input/by-path/platform-i8042-serio-0-event-kbd

如果我在打字,则会生成大量字节,如果我没有打字,则会阻止(不输出任何内容)。类似的内容应该适用于鼠标,但在我的系统上似乎不起作用。

默认情况下,输入设备的权限非常严格,您可能需要对它们进行 chgrp 更改(例如)。我绝对不会像 root 用户一样运行这样的程序!请注意,在 dev 中搞乱权限可能会带来许多安全问题。如果是共享计算机,我肯定不会考虑这个。

这不是一个简单的程序编写(您可以将其编写为一堆相互信号传递的脚本,但我个人不会这样做),使用类似 xscreensaver(甚至只是 CPU 使用率)的东西会更简单(但也许不太有趣)。


这对键盘有效,但对于鼠标/触摸板来说,即使对我来说也无效。 - Shiv Deepak

0
我建议使用更简单的方法: 只需告诉wget可以使用多少带宽,留出一些空余的带宽用于浏览网页。
只需使用:
wget --limit-rate=1.5k http://example.com

我不想为我的下载设置带宽限制,因为当系统空闲时我将无法做任何有用的事情。 - Shiv Deepak
唯一的其他方法是作为“屏幕保护程序”执行的自定义脚本。这要困难得多,而且 - 取决于您的系统空闲时间有多长 - 甚至可能不会更快。 - Turbo J
这是唯一的方法吗?我想知道屏幕保护程序是如何实现的。希望我能从中得到一些线索。 - Shiv Deepak

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接