Alternativa para cron

2

Estou insatisfeito com o cron no linux.

  • Carregar picos: os trabalhos @hourly criam picos de carga. Eu quero um deslocamento aleatório (por trabalho).
  • carga alta: pule alguns trabalhos: se a carga estiver muito alta, quero pular alguns trabalhos.

Eu poderia resolver isso com wrappers de scripts de shell, mas isso é "sujo".

Até agora, eu uso o vixie cron padrão.

Como você resolve isso? Qualquer alternativa ao vixie cron?

    
por guettli 28.02.2012 / 12:47

5 respostas

4

Dê uma olhada no fcron :

and, of course, in order to make it really useful, the time remaining until next execution is saved each time the system is stopped. You can also say:

run that command once between 2am and 5am which will be done if the system is running at any time in this interval.

Fcron also includes a useful system of options, which can be applied either to every lines following the declaration or to a single line. Some of the supported options permit to:

  • run jobs one by one (fcrontab option serial),
  • set the max system load average value under which the job should be run (fcrontab option lavg),
  • set a nice value for a job (fcrontab option nice),
  • run jobs at fcron's startup if they should have been run during system down time (fcrontab option bootrun),
    
por 28.02.2012 / 13:34
4

O que você precisa é simples. Deixe seus trabalhos no @Hourly, mas em vez de chamar um comando direto, use um wrapper do bash com a seguinte função:

#! /bin/bash

# Random wait function
RANDOMWAIT=60
random_wait() {
  sleep $(( $RANDOM % ($RANDOMWAIT * 60) + 1 ))
}

run_job() {
  your-cron-command-here
}

random_wait
run_job

Isso atrasará a execução em um determinado período de tempo (de 1 a 60 minutos). Altere o RANDOMWAIT para um valor mais alto para um intervalo maior. ($ RANDOM é uma variável de shell especial no Linux e é sempre um inteiro aleatório)

Essa é uma prática comum precisamente pelo motivo que você descreve. Eu peguei este exemplo de código do script cron do pacote yum-cron actually (localizado em /etc/cron.daily .

    
por 28.02.2012 / 14:00
1

Dependendo do que você está fazendo, um sistema de enfileiramento de trabalho em segundo plano, como o Resque , funciona?

    
por 28.02.2012 / 14:01
1

Não há nada "sujo" em escrever um wrapper de shell para executar seus trabalhos agendados sob certas condições, intervalos aleatórios não vão negar seus problemas de carga.

/etc/cron.hourly/wrapper_script

dentro de você condições como o que fazer quando estiver sob carga.

Embora se você não puder executar suas tarefas cron quando sob carga eu estaria reavaliando suas tarefas do cron, como elas poderiam ser deslocadas para serem executadas em outro lugar, elas se beneficiariam do sharding do banco de dados etc ...

    
por 28.02.2012 / 13:13
0

Vixie Cron suporta jitter, veja aqui (1)
Quanto a pular com base na carga vai, você precisará hackear isso, eu não estou ciente de qualquer ferramenta cron-like que pode fazer isso.

    
por 28.02.2012 / 13:14

Tags