2

По причинам, в которые я не буду вдаваться, мне нужно копировать каталоги, пока средняя загрузка системы мала. Может ли кто-нибудь помочь мне написать сценарий BASH, который будет копировать содержимое каталога, но перед копированием каждого файла убедитесь, что средняя загрузка системы ниже X, а если нет, подождите Y секунд и повторите попытку?

3 ответа3

2

Можете ли вы просто запустить rsync или любую другую команду копирования, которую вы хотите использовать в сочетании с nice, чтобы установить приоритет процессора и / или ionice, чтобы установить приоритет io.

2

Существует опция rsync которая ограничивает пропускную способность ввода / вывода:

--bwlimit=KBPS          limit I/O bandwidth; KBytes per second
1

просто для удовольствия (и да, я знаю, что он не пытается скопировать файл снова в случае, если он перешел в спящий режим, я оставлю это для вашего собственного удовольствия; на ум приходит прогулка по "$ @" + смещение ):

#!/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) и позволил бы ОС выполнять планирование (которое предназначено именно для этого ).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .