站长网 Linux linux – 如何在服务器负载较低时运行作业?

linux – 如何在服务器负载较低时运行作业?

我有一个运行磁盘快照的命令(在EC2上,冻结XFS磁盘并运行EBS快照命令),该命令设置为作为cron作业定期运行.理想情况下,如果在任务计划运行时磁盘被大量使用,我希望能够将命令延迟一段时间. 我担心使用nice / ionice可能没有正确的效果,因为我希望脚本在运行

我有一个运行磁盘快照的命令(在EC2上,冻结XFS磁盘并运行EBS快照命令),该命令设置为作为cron作业定期运行.理想情况下,如果在任务计划运行时磁盘被大量使用,我希望能够将命令延迟一段时间.

我担心使用nice / ionice可能没有正确的效果,因为我希望脚本在运行时以高优先级运行(即等待一段时间,然后快速完成).

谢谢.

更新:

这就是我最终的目标.它检查/ proc / diskstats并在当前IO活动达到0时运行我的作业,或者我们超时.当我看看我们的服务器在生产中实际获得的IO活动时,我可能不得不调整它:

#!/bin/bash

DEVICE=sdf

# we want to make a snapshot when IO in progresses reaches this:
LOW_THRESHOLD=0

TIMER=0
MAX_SEC_DELAY=120

# Get the number of IO operations in progress:
ioInProgress(){
    grep $DEVICE /proc/diskstats | awk '{print $12}'
}

# Wait for a good time to run snapshot,else timeout:

while [[ $TIMER -lt $MAX_SEC_DELAY && $(ioInProgress) -gt $LOW_THRESHOLD  ]]; do
    TIMER=`expr $TIMER + 1`
    sleep 0.5
done

# Recording delay required:
echo $TIMER
echo "Executing snapshot"
run-the-snapshot

解决方法

我在这里发现了一个perl脚本
http://www.skolnick.org/cgi-bin/list.pl?file=serverload.pl

这应该做你需要的.

你可以用一个解析正常运行时间的简单shell脚本来实现它
只有在负载平??均值降低到某个值后才执行.

请注意,如果你的服务器一直很忙,有一个逃跑的过程,那么你的
cronjobs永远不会执行!

如果你有内存,也许更好的想法就是在最低的操作系统上运行你的cron作业优先级,因此他们只会消耗多余的资源.

本文来自网络,不代表站长网立场,转载请注明出处:https://www.zwzz.com.cn/html/server/linux/2021/0525/6034.html

作者: dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部