Cron vários scripts a cada 5 minutos com 10 segundos entre cada script

1

Eu tenho vários arquivos configurados no meu crontab , todos esses scripts devem ser executados a cada 5 minutos.
O problema surge quando o script precisa de muito CPU e IO por vez e a máquina fica indisponível.

Para atenuar esse efeito, eu gostaria de saber se há uma opção para colocar 10 segundos entre cada início de script. Ele deve alavancar o dramático aumento de carga (mais de 40 para um monocore) que emitimos quando todos esses scripts possuem muitos dados para processar.

É possível programar script a cada 5 minutos no crontab sem iniciar no início do quinto minuto para todo o script?

    
por Kiwy 12.12.2014 / 11:35

2 respostas

3

Crie uma entrada cron que seja:

* / 5 * * * * processA; dormir 10; processB; dormir 10; processo C

No entanto, eu recomendo contra isso.

Eu não usaria o cron. Cron não é tão inteligente. Se você disser para executar um trabalho a cada 5 minutos, e o trabalho levar 6 minutos para ser executado, você terá dois processos em execução. No final do dia, você terá dezenas ou centenas desses processos sendo executados ao mesmo tempo.

Uma maneira mais segura é não usar o cron. Em vez disso, execute um script como este. Use os scripts systemd ou /etc/init.d para transformá-lo em um "serviço" que está sempre em execução:

while true ; do processA sleep 10 processB sleep 10 processC sleep 600 done

Uma explicação mais longa pode ser encontrada aqui:

link

    
por 12.12.2014 / 13:39
2

Não há opção é cron para chegar a unidades de segundos. Em vez disso, use sleep .

Por exemplo, caso sejam todos scripts de shell:

  1. Defina o cron para o primeiro script como de costume.
  2. Adicione sleep 10 ao segundo script para que a execução real comece após 10 segundos.
  3. Adicione sleep 20 ao terceiro ... e assim por diante.
por 12.12.2014 / 11:43

Tags