Como impedir que tarefas cron sejam executadas durante determinados momentos no Debian? (um 'modo de jogo' / 'desempenho')

12

Parece que eu logcheck configurado como uma tarefa agendada e sempre que é processo de execução greppelo logcheckocupa cerca de ¼ da minha CPU.

Agora, tenho alguns momentos em que preciso da minha capacidade total da CPU e meu sistema consome o mínimo de recursos possível, exceto por processos / específicos (que talvez eu possa especificar de alguma forma).

É possível configurar minha máquina Debian 9.1 com KDE em algum tipo de modo de desempenho (ou 'modo de jogo') que evite que processos não iniciados explicitamente pelo usuário ocupem muitos recursos do sistema, reduz a carga de processos em segundo plano e, o mais importante : atrasa os trabalhos cron até que esse modo seja parado novamente?

mYnDstrEAm
fonte
6
Uma solução simples seria não executar a verificação de log no trabalho cron, mas escrever um script personalizado e executá-lo no trabalho cron. No script, primeiro execute as verificações necessárias e, em seguida, execute a verificação de log no final do script, se todas as verificações forem aprovadas.
SauceCode 4/17/17
5
Verifique a prioridade. Se tiver sido reduzido para 19, só será executado quando a CPU não tiver mais nada a fazer.
Thorbjørn Ravn Andersen

Respostas:

18

Se "determinados horários" não forem fixos, ou seja , você deseja especificar manualmente quando o sistema entra e sai do "modo de desempenho", basta parar e iniciar cron:

sudo systemctl stop cron

impedirá a execução de qualquer tarefa cron e

sudo systemctl start cron

irá reativá-los.

Você também pode dar uma olhada em anacronvez de cron, pode ser mais fácil ajustar globalmente de uma maneira que se encaixe nos seus usos.

Stephen Kitt
fonte
12

Eu consideraria duas abordagens

  1. Deixe o agendamento intocado, mas execute todos os crontrabalhos em nice, e possivelmente até ionice:

    0 * * * *    root    ionice -c3 nice /some/command and parameters
    
  2. Não permitir crontrabalhos durante determinados períodos. Lembre-se de que qualquer usuário que possa criar (ou remover) o arquivo de sinalizador pode controlar essa abordagem. Isso pode funcionar se você quiser ter um modo de jogo configurado sob demanda , adicionando os comandos touche rmao script de inicialização do seu jogo. (Você pode precisar usar em /tmpvez de /var/run, mas é trivialmente aberto a qualquer usuário.)

    0 18 * * *      root    touch /var/run/no_cron
    0 19 * * *      root    rm -f /var/run/no_cron
    
    0 * * * *       root    test ! -f /var/run/no_cron && /some/command...
    

Uma vez configurada, nenhuma das abordagens requer acesso root. Além disso, você pode decidir com antecedência quais trabalhos devem estar sujeitos a esse controle e quais não.

roaima
fonte
1
Corrigir. Por que gargalar um processo quando há muita CPU disponível? As prioridades do sistema operacional surgem quando há escassez, não arbitrariamente.
MSalters
Não acredito que a -c3 -n7combinação faça sentido, pelo menos no Linux. A classe de agendamento ocioso não tem prioridades.
gardenhead
@gardenhead oops, você está certo. Eu -c2 -n7me uso, mas quando deixei a classe ociosa para esta resposta, omiti a remoção da prioridade.
roaima 5/09/17