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:
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.
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.
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.
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!)
Respostas:
Para executar uma tarefa a cada 20 minutos, iniciando às 5 horas da tarde, tente o seguinte:
Explicação
Um
*
campo no minuto é o mesmo que0-59/1
onde0-59
está o intervalo e1
é 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.fonte
Certo!
fonte
5-59/20
é possível, mas5,25,45
tem a vantagem de ficar imediatamente claro o que isso faz.Podes tentar:
*/5 * * * * sleep N; your job
fonte
sleep `shuf -i 1-100 -n 1`
faz o truque.