在Linux中进行计划:计算机闲置时运行任务(=无用户input)

我想在我的Ubuntu 8.10盒子上运行Folding @ home客户端,只是因为程序的内存消耗太大而导致它闲置。

“空闲”是指没有用户活动的状态(键盘,鼠标或任何其他)。 由于F @ H具有最低的CPU优先级,因此其他(可能很重)的进程可以运行。 重点在于改善用户体验,并在他不在的时候进行繁重的工作。

如何做到这一点?

Solutions Collecting From Web of "在Linux中进行计划:计算机闲置时运行任务(=无用户input)"

当有问题的计算机是桌面时,您可以将启动/停止脚本挂接到屏幕保护程序,以便在屏幕保护程序处于非活动状态时停止进程,反之亦然。

只有在系统空闲时才安排进程,这很费劲。

实际上在这些条件下启动程序并不是难点。 你必须安排程序彻底关闭,并找出如何以及何时做到这一点。

您必须能够区分该进程自己的CPU使用情况和可能正在运行的其他程序的CPU使用情况,以便确定系统是否正常“空闲”。

只有在系统空闲的情况下,才能对过程进行调度 。 只需使用'nice'命令来启动Folding @ Home客户端。

但是这并不能解决内存不足的问题。 如果你已经启用了交换空间,那么系统应该能够交换出任何低优先级的进程,这样他们就不会消耗资源和真实的资源,但是每次你的Folding @ Home客户端时,要小心磁盘I / O交换进出RAM。

ps RAM现在非常便宜…

pps看这篇文章

可能是你需要通过很好的空闲任务最低优先级设置。

你会想看几件事情来确定“闲置”,并探索sysinfo()调用(链接指出它在各种内核版本之间填充的结构的差异)。

Linux不能以一种典型的方式管理内存。 不要只看负荷,看看记忆。 特别是,/ proc / meminfo有一个以Committed_AS开头的奇妙行,它显示了内核实际承诺给其他进程的内存量。 比较一下你从sysinfo中学到的东西,你可能会意识到0.00的一分钟平均负载并不意味着运行某个程序需要分配256MB内存的时间,因为内核可能真的是过度销售。 注意,所有由sysinfo()填充的值都可以通过/ proc获得,sysinfo()只是获取它们的一个简单的方法。

你也可以看看每个核心在启动后在IOWAIT上花了多少时间,这更加强调了你是否应该运行一个I / O资源管理器。 在/ proc / stat中抓取这些信息,第一行包含所有CPU的总计数。 IOWAIT在第六个领域。 当然,如果你打算设置一个CPU的亲和力,那么只有这个CPU会是感兴趣的(它仍然是第六个字段,以USER_HZ为单位,或者典型地在100秒内)。 对btime的平均值也在/ proc / stat中找到。

总之,不要只看负载平均值。

编辑

你不应该假设缺乏用户输入意味着闲置.. cron工作倾​​向于运行..公共服务不时地征税等。空闲仍然是你最好的猜测基于阅读上面列出的值(或更多) 。

编辑2

查看/ proc / sys / vm中的旋钮值还可以很好地指示用户认为是空闲的,特别是swappiness。 我意识到你只在你自己的盒子上做这个,但这是一个权威的维基,问题标题是通用的:)

文件/ proc / loadavg具有系统当前的负载。 你可以写一个bash脚本来检查它,如果它低,那么运行命令。 然后,您可以将其添加到/etc/cron.d以定期运行它。

该文件包含有关系统负载的信息。 前三个数字表示系统上活动任务的数量 – 实际运行的进程 – 在过去的1分钟,5分钟和15分钟内平均。 下一个条目显示当前可运行任务的当前数量 – 当前计划运行的进程而不是在系统调用中被阻止 – 以及系统上的进程总数。 最后一项是最近运行的进程的进程ID。

示例输出:

0.55 0.47 0.43 1/210 12437 

看到这个线程的perl脚本,检查系统是否空闲(通过GNOME屏幕保护程序)。
怠速启动和停止时可以运行命令。
我正在使用这个脚本来改变空闲BOINC偏好
(给BOINC更多的内存和CPU使用)。

Perl论坛上的perl脚本