executa a tarefa cron apenas se não for muito alto

3

Eu preciso sincronizar dois sistemas, então os produtores listam novas entidades a serem criadas no aplicativo do consumidor. Ele não tem necessidade em tempo real (principalmente para datamining, portanto, ficar algumas horas atrasado não é um problema), mas é importante que essa tarefa não seja executada quando o servidor já estiver ocupado atendendo usuários reais.

Eu tentei executar o serviço de sincronização com uma prioridade mais baixa (nice -n19), mas pelo que vi, ele ainda pode prejudicar o desempenho, como se esse serviço de sincronização executasse uma grande consulta ao banco de dados, ainda aumentaria a carga no processo de banco de dados e na máquina completa

existe uma maneira de testar a carga e simplesmente sair se ela estiver muito alta (digamos, acima de 2)?

O ideal é ter algum tipo de alerta se o cron não estiver sendo processado por muito tempo porque a carga nunca fica abaixo de 2.

Esta é uma boa abordagem ou estou criando mais problemas que estou resolvendo?

    
por Xavier 20.07.2015 / 18:30

1 resposta

3

Simplesmente envolva seu script dentro de uma condição de teste. Por exemplo:

#!/bin/bash
load='grep -o "^." /proc/loadavg'
if [ $load -gt 2 ]; then
    exit 1
fi
### Call you script here ###

O script acima verificará a média de carregamento de 1 minuto e, se for maior que 2, sairá. Por outro lado, se a média da carga for menor ou igual a 2, continuará.

Mais testes complexos podem ser escritos, mas o conceito é o mesmo: use um script / função de wrapper e, em seguida, chame seu script de sincronização personalizado.

    
por 20.07.2015 / 18:47