По причинам, в которые я не буду вдаваться, мне нужно копировать каталоги, пока средняя загрузка системы мала. Может ли кто-нибудь помочь мне написать сценарий BASH, который будет копировать содержимое каталога, но перед копированием каждого файла убедитесь, что средняя загрузка системы ниже X, а если нет, подождите Y секунд и повторите попытку?
3 ответа
Существует опция rsync которая ограничивает пропускную способность ввода / вывода:
--bwlimit=KBPS limit I/O bandwidth; KBytes per second
просто для удовольствия (и да, я знаю, что он не пытается скопировать файл снова в случае, если он перешел в спящий режим, я оставлю это для вашего собственного удовольствия; на ум приходит прогулка по "$ @" + смещение ):
#!/bin/bash
for i in file1 file2 file3 etc
do
LOAD=$(uptime | awk '{ sub(/,.*/, "", $9); print $9 * 100.0 }' )
if [ $LOAD -lt 85 ]
then
echo "copy $i to wherever"
else
echo "sleep since load is $LOAD"
sleep 5
fi
done
Используя среднее значение загрузки за последнюю минуту и копируя только, если система простаивает на 85%, она что-то сделает.
в любом случае, я бы просто использовал rsync с регулированием (как упоминалось Денисом), а также установил высокое значение nice (равное низкому приоритету) для процесса rsync (как упомянуто zoredache) и позволил бы ОС выполнять планирование (которое предназначено именно для этого ).
