Execute o trabalho Cron a cada N minutos mais o deslocamento


251

*/20 * * * *

Garante que ele seja executado a cada 20 minutos. Gostaria de executar uma tarefa a cada 20 minutos, começando às 5 horas da tarde. Isso é possível com Cron? Seria:

5/20 * * * * ?


10
Graças os babilônios, que decidiram que o nosso sistema de tempo deve ser exatamente dividido por 1,2,3,4,5 e 6.
arivero

3
se é divisível por 2 e 3 também é divisível por 6
Ziofil

Respostas:


514

Para executar uma tarefa a cada 20 minutos, iniciando às 5 horas da tarde, tente o seguinte:

 5-59/20 * * * *

Explicação

Um *campo no minuto é o mesmo que 0-59/1onde 0-59está o intervalo e 1é a etapa . O comando será executado no primeiro minuto no intervalo (0) e, em seguida, em todos os minutos sucessivos que estão distantes do primeiro pelo passo (1) até o último (59).

É por isso que */20 * * * *será executado em 0 minutos, 20 minutos depois e 40 minutos depois - o que é igual a cada 20 minutos. No entanto, */25 * * * *será executado em 0 minutos, 25 minutos depois e 50 minutos depois - o que não é o mesmo que a cada 25 minutos. É por isso que geralmente é desejável usar um valor de etapa no campo minuto que se divide igualmente em 60.

Portanto, para compensar a hora de início, especifique explicitamente o intervalo e defina o primeiro valor para a quantidade do deslocamento.

Exemplos

5-59/20 * * * * será executado 5 minutos depois, 25 minutos depois e 45 minutos depois.

10-59/25 * * * * será executado 10 minutos depois e 35 minutos depois.

1-59/2 * * * * será executado a cada minuto ímpar.


3
isso funciona perfeitamente. Como você descobriu isso? Você pode me indicar os documentos? Obrigado.
AJP

12
Várias pesquisas no Google levaram-me a esta resposta de falha no servidor . Cometi um erro que me deixou realmente confuso, principalmente porque outros resultados sugeriam que a etapa do módulo de minutos deveria ser igual a zero . Finalmente encontrei esta página de manual que me deu a resposta. Como resultado, pude comentar a resposta de falha do servidor que foi corrigida. Não me lembro dos termos de pesquisa reais que usei para encontrar a página IBM.
toxalot

3
Obrigado e muito bom trabalho @toxalot, desejo que possamos atribuir o distintivo "Tireless Investigator"! : P
AJP 07/10

5
RI MUITO. Eu precisava executar um trabalho a cada 10 minutos (deslocamento de 5) e realmente não queria usar uma lista delimitada por vírgula, por isso estava determinado a encontrar a resposta.
toxalot

2
Infelizmente, o CPanel não parece gostar disso :(
Robert Went

53

Certo!

5,25,45 * * * * /your/cron

2
Obrigado. Acabei fazendo isso, esperava que houvesse uma solução mais elegante para isso.
AJP

13
Às vezes, a solução simples é melhor porque é fácil, fácil de ler e entender. Eu gosto de saber que isso 5-59/20é possível, mas 5,25,45tem a vantagem de ficar imediatamente claro o que isso faz.
thomasrutter

2
apenas se o passo é grande o suficiente
Tebe

3
Este é um exemplo muito melhor. É preciso 0 carregamento cognitivo para entender quando o trabalho começa.
Dylan Pierce

11

Podes tentar: */5 * * * * sleep N; your job


4
Não vejo nada de errado nisso - na verdade, é muito semelhante à maneira como o trabalho cron do certbot atinge um deslocamento aleatório que ajuda a manter a carga do servidor equilibrada. certeza não merece todos aqueles downvotes
billynoah

6
Isso me fez pensar em como dormir um número aleatório de segundos. sleep `shuf -i 1-100 -n 1`faz o truque.
Laizer 6/02/19

caramba, @Laizer você me fez aprender algo de novo! (obrigado!)
UncaAlby
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.