仅当负载不太高时才运行 cron 作业

Xav*_*ier 4 linux cron high-load

我需要同步两个系统,以便生产者列出要在消费者应用程序上创建的新实体。它没有实时需求(主要是数据挖掘,因此延迟几个小时不是问题),但重要的是,当服务器已经忙于为真实用户提供服务时,不要运行此任务。

我尝试以较低的优先级运行同步服务(nice -n19),但就我所见,它仍然会损害性能,就好像此同步服务运行大型数据库查询一样,它仍然会增加数据库的负载工艺和整机

有没有办法测试负载并在负载太高时直接退出(比如上面的2)?

理想情况下,如果 cron 没有处理太长时间,就会发出某种警报,因为负载永远不会低于 2。

这是一个好方法还是我正在制造更多正在解决的问题?

sho*_*hok 5

只需将脚本包装在测试条件中即可。例如:

#!/bin/bash
load=`grep -o "^[0-9]*" /proc/loadavg`
如果 [ $load -gt 2 ]; 然后
    1号出口
菲
### 在这里调用你的脚本###

上面的脚本会检查1分钟的平均负载,如果大于2,就会退出。另一方面,如果平均负载小于或等于2,则继续。

可以编写更复杂的测试,但概念是相同的:使用包装器脚本/函数,然后调用自定义同步脚本。