Quão preciso é um daemon do cron?

20

O agendador de tarefas cron é realmente preciso?

Quero dizer, eu preciso de um script para rodar todas as noites o mais tardar possível, MAS antes das 00:00 do dia seguinte.

Idealmente, eu executaria um cron job às 23h59 (ou 23h59), mas o sistema será realmente preciso? Como um segundo importa, devo definir o cron job como 23:58 para deixar algum tempo?

    
por Sebastian 09.09.2015 / 08:20

4 respostas

24

O que o cron pode garantir é que o seu trabalho será iniciado não antes do tempo especificado (sujeito à precisão do relógio do sistema). Mas não há como dar qualquer garantia sobre o tempo de término do trabalho. Dependerá de muitos fatores:

  • Quão carregado é o sistema
  • O que o trabalho faz
  • Lentidão devido a problemas de hardware
  • Lentidão devido a problemas de rede (supondo que o trabalho dependa da rede)

Minha recomendação é alterar seu design de forma que um tempo específico de conclusão não seja um requisito.

    
por 09.09.2015 / 08:57
14

Suponho que isso depende do seu daemon cron, mas a documentação e o padrão indicam que, se você especificar minutos, o trabalho será executado no minuto especificado.

Veja:

Esteja ciente de que seu script será iniciado quando o relógio passar para o horário correto, mas terminará algum tempo depois disso.

    
por 09.09.2015 / 08:24
8

Normalmente, o cron irá iniciar em 23:59:00 , verificar todos os seus arquivos crontab, filtrar aqueles que forem relevantes para 23:59 e iniciá-los. A digitalização desses arquivos é muito rápida, porque não há muitos deles e todos incluem apenas algumas linhas. Então, normalmente, os cronjobs começam em 23:59:00 ou 23:59:01 Existem algumas maneiras de desacelerar intencionalmente esse processo. (adicione milhões de linhas ao crontab, por exemplo). Se o sistema estiver totalmente sobrecarregado, isso também não funcionará tão rápido.

Além disso, isso é obviamente dependente da implementação.

Se você precisar de horários de início muito precisos, é melhor criar um programa que durma até a hora desejada e, em seguida, ser executado (por exemplo, usando c + + 11 ). Mas em um sistema operacional não em tempo real, isso também não será exato! Além disso, o relógio do PC não sabe a hora exata!

Em todos os casos, isso só garante que o programa seja iniciado em (mais ou menos) o tempo desejado. Não pode haver qualquer garantia de que o programa termina bem-sucedido até um determinado momento, por isso acredito firmemente que você deve mudar alguma coisa nesse requisito.

    
por 09.09.2015 / 17:28
0

Depende do seu tempo de execução geral do script e da precisão do tempo do servidor.

59 23 * * * /some/script/file.sh

irá lançar seu script exatamente às 23:59, mas, se você tiver alguns comandos que funcionem por muito tempo, parte do script pode ser executada após a meia-noite.

    
por 09.09.2015 / 08:26

Tags