Estoy llamando cpulimit
de cron
:
00 16 * * * /usr/bin/cpulimit --limit 20 /bin/sh /media/storage/sqlbackup/backups.sh
Cuando comienza el trabajo, la CPU aumenta y emite alertas como siempre, sin que se haya producido ningún límite real identificable. El trabajo en sí itera sobre un directorio de muchos subdirectorios y realiza rsync
cada vez, lo que creo que genera rsync
procesos secundarios (ejecutar top tendrá un pid disponible para el rsync llamado, que después de unos minutos tendrá un pid diferente para rsync
).
No estoy seguro de cómo utilizarlo correctamente cpulimit
para limitar eficazmente el uso que consume este proceso.
Puede ser importante tener en cuenta que se trata de una máquina virtual con 2 GB de RAM y 1 vCPU.
Respuesta1
De forma predeterminada, cpulimit
no limita los procesos secundarios, por lo que rsync
no se limita en absoluto. Si está ejecutando una versión bastante reciente, cpulimit
debería poder utilizar la opción --include-children
(o -i
). (Ver tambiénesta respuesta.)
$ 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]>.
Eso cambiaría tu entrada cron a:
00 16 * * * /usr/bin/cpulimit --include-children --limit 20 /bin/sh /media/storage/sqlbackup/backups.sh
EDITAR: Como respondió el OP (ellos mismos), funcionaría con cpulimit
los rsync
comandos dentro del script, pero eso no garantizaría que su script sea agradable mientras realiza otras funciones. Por ejemplo, si el script tiene que procesar un directorio masivo, podría atascar el sistema y provocar un pico de CPU y una alerta.