我有一个运行磁盘快照的命令(在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