Estou ligando cpulimit
de cron
:
00 16 * * * /usr/bin/cpulimit --limit 20 /bin/sh /media/storage/sqlbackup/backups.sh
Quando o trabalho é iniciado, a CPU dispara e alerta como sempre, sem que nenhum limite real identificável tenha ocorrido. O trabalho em si itera em um diretório de muitos subdiretórios e executa rsync
's a cada vez, o que acredito estar gerando rsync
processos filhos (a execução top terá um pid disponível para o chamado rsync, que após alguns minutos terá um pid diferente para rsync
).
Não tenho certeza de como utilizar adequadamente cpulimit
para limitar efetivamente o uso que esse processo consome.
Pode ser importante ter em mente que esta é uma VM com 2G RAM e 1vCPU.
Responder1
Por padrão, cpulimit
não limita processos filhos, portanto, rsync
não está sendo limitado de forma alguma. Se você estiver executando uma versão recente o suficiente, cpulimit
poderá usar a opção --include-children
(ou -i
). (Veja tambémesta resposta.)
$ cpulimit -h
Usage: cpulimit [OPTIONS...] TARGET
OPTIONS
-l, --limit=N percentage of cpu allowed from 0 to 400 (required)
-v, --verbose show control statistics
-z, --lazy exit if there is no target process, or if it dies
-i, --include-children limit also the children processes
-h, --help display this help and exit
TARGET must be exactly one of these:
-p, --pid=N pid of the process (implies -z)
-e, --exe=FILE name of the executable program file or path name
COMMAND [ARGS] run this command and limit it (implies -z)
Report bugs to <[email protected]>.
Isso mudaria sua entrada do cron para:
00 16 * * * /usr/bin/cpulimit --include-children --limit 20 /bin/sh /media/storage/sqlbackup/backups.sh
EDIT: Como o próprio OP respondeu, funcionaria para cpulimit
os rsync
comandos dentro do script, mas isso não garantiria que seu script estivesse sendo legal enquanto executa outras funções. Por exemplo, se o script precisar processar um diretório enorme, ele poderá paralisar o sistema e causar picos e alertas de CPU.