Um script BASH que copiará o conteúdo do diretório desde que o carregamento médio do sistema seja baixo?

2

Por razões que não vou entrar, eu preciso copiar diretórios, desde que a carga média do sistema seja baixa. Alguém pode me ajudar a escrever um script BASH que copie o conteúdo de um diretório, mas verifique se a carga média do sistema está abaixo de X antes de copiar cada arquivo e, se não, aguarde Y segundos e tente novamente?

    
por Necessary 26.05.2010 / 06:04

3 respostas

2

Você pode simplesmente executar o comando rsync ou qualquer comando de cópia que você deseja usar combinado com bom para definir a prioridade do processador e / ou ionice para definir a prioridade do io.

    
por 26.05.2010 / 06:43
2

Existe uma opção de rsync que limita a largura de banda de E / S:

--bwlimit=KBPS          limit I/O bandwidth; KBytes per second
    
por 26.05.2010 / 06:55
1

apenas por diversão (e sim, eu sei que ele não tenta copiar o arquivo novamente no caso de ele entrar no modo sleep, eu vou deixar isso para você se divertir; andar por cima de "$ @" mente + deslocamento):

#!/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

usando a média de carregamento do último minuto e copiando somente se o sistema estiver 85% inativo, vai fazer alguma coisa.

de qualquer forma, eu usaria apenas rsync com throtteling (como dennis mencionou) além de definir um valor alto (igual a baixa prioridade) ao processo rsync (como zoredache mencionado) e deixar o os fazer o agendamento (que é projetado para faça exatamente isso.

    
por 26.05.2010 / 07:43