По причинам, в которые я не буду вдаваться, мне нужно копировать каталоги, пока средняя загрузка системы мала. Может ли кто-нибудь помочь мне написать сценарий 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) и позволил бы ОС выполнять планирование (которое предназначено именно для этого ).