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

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

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

我尝试过以较低的优先级运行同步服务(n19),但就我所见,它仍然会影响性能,因为如果此同步服务运行大型数据库查询,它仍然会增加数据库进程和整个机器的负载

有没有办法测试负载,如果负载太高(比如高于 2)就退出?

理想情况下,如果 cron 长时间没有处理,则会发出某种警报,因为负载从未低于 2。

这是一个好的方法吗?或者我是否会创造更多需要解决的问题?

答案1

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

/bin/bash #!/bin/bash
负载=`grep -o“^[0-9]*”/proc/loadavg`
如果 [ $load -gt 2 ]; 那么
    出口 1
### 在这里调用你的脚本 ###

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

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

相关内容