Quais são algumas maneiras de impedir que os trabalhos do cron do usuário esmaguem os servidores?

7

Ocorre com bastante frequência que tarefas do cron do usuário em servidores compartilhados são executadas ao mesmo tempo e são capturadas na contenção (por mais que eu tenha sido capaz de dizer). Portanto, o load explode, o Nagios está zangado, o Apache pára de responder, você não pode conectar o SSH porque ele expira, etc. Eu não estou em uma posição onde eu possa decidir unilateralmente que os usuários não podem rodar crons, mas eu gostaria para combater este problema onde pgrep crond | wc -l retorna > 50.

Parece que deve ser possível fazer um escalonamento limitando o número de processos em execução em qualquer momento ou algo semelhante (como enviar SIGSTOP até que alguns deles resolvam apenas menos hacky), mas ainda não encontrei nenhum boas ligações.

O hardware: 4 CPUs e mais, Low-end é Dell 1435s com ~ 8GB de memória, RAID 10 WD EADS Principalmente Plesk e cPanel, mas também alguns sistemas Sphera malignos.

Como você lida com esse problema, sf?

    
por Wyatt 16.10.2011 / 04:16

3 respostas

5

Você pode usar cron.allow e cron.deny para limitar o acesso do usuário ao cron, ou você pode usar Limites do PAM limitar o uso da CPU, o número de processos e coisas assim. Além disso, a solução é criar algo para monitorar e lidar com cron jobs pelos usuários, porque o cron não tem realmente um limite de quantos jobs serão executados.

Acho que o CPanel tem algo no número de tarefas cron executando ao mesmo tempo, mas é uma ferramenta específica (não tenho certeza).

    
por 16.10.2011 / 04:43
2

Acho que você tem um desses problemas:

  • não há memória suficiente para executar os crontabs ao mesmo tempo. Você pode corrigir:

    • adicionando mais RAM
    • limitando o máximo de memória que um usuário pode alocar
    • reprogramar as tarefas para diminuir o número de tarefas simultâneas - talvez seja necessário substituir o crond e usar um agendador diferente
  • alta E / S. Você pode corrigir:

    • reduzindo a prioridade de E / S com ionice
    • reprogramar os trabalhos para diminuir o número de trabalhos simultâneos

Tente descobrir se a máquina está trocando e se não estiver trocando durante a noite, então mude a classe de prioridade de E / S cron para inativa:

sudo ionice -c 3 -p $(pgrep cron)
    
por 16.10.2011 / 05:26
1

Sempre programei cronjobs em horários aleatórios (especialmente minutos). Eu geralmente vejo exemplos do cron que são executados à meia-noite, como:

0 0 * * *  /usr/bin/echo "Job ran"

Se você tem muitos trabalhos definidos como esse, está pedindo por problemas. Infelizmente, estes são frequentemente longos trabalhos no sistema. Eu também tendem a agendar trabalhos em horários diferentes ao longo de uma janela de processo em lote. (23 a 05) horas.

Eu gosto da nova especificação de cron usada no Ubuntu. Isso tem vários diretórios /etc/cron.* para especificar jobs para serem executados. Eles são executados em sequência, em vez de limitar a carga paralelamente.

Você deve conseguir ver o que está agendado nos arquivos localizados em /etc/spool/cron/crontabs . A leitura desses arquivos exigirá acesso root. Se são os usuários que estão causando os problemas, discuta o problema com eles.

Você também pode verificar /var/log/syslog para entradas CRON para ver o que está sendo executado quando.

    
por 16.10.2011 / 16:59