Quero saber se existe uma maneira mais fácil de executar um trabalho a cada 25 minutos. No cronjob, se você especificar o parâmetro minute como * / 25, ele será executado apenas nos minutos 25 e 50 de cada hora
13
O comando no crontab é executado com, /bin/sh
para que você possa usar a expansão aritmética para calcular se o módulo atual do minuto 25 é igual a zero:
*/5 * * * * [ $(( $(date +\%s) / 60 \% 25 )) -eq 0 ] && your_command
cron
executará essa entrada inteira a cada 5 minutos, mas somente se o módulo atual de minutos (em minutos desde a época) for igual a zero será executado your_command
.
Como outros já apontaram, 1 dia não é divisível igualmente por 25 minutos, portanto isso não fará your_command
com que seja executado no mesmo horário todos os dias, mas será executado a cada 25 minutos.
Sua melhor aposta é executar em 20 ou 30 minutos.
O melhor a seguir é acionar a cada 5 minutos e, em seguida, manter uma contagem interna ou carimbo de data e hora e executar a cada 5 acionadores, ou se tiver decorrido 25 minutos desde a última execução.
Mais complicado seria calcular os horários corretos para um dia, começando à meia-noite, e aceitar o erro no final do dia. Isso envolveria duplicar a entrada do crontab para as diferentes horas.
Mais complicado do que isso seria calcular os horários durante um mês inteiro, o que envolveria muitas cópias da entrada crontab para cobrir as diferentes combinações.
Finalmente, você pode implementar seu próprio sempre no daemon e fazer com que ele faça o agendamento.
fonte
Não tenho experiência direta com ele, mas o fcron parece fazer o que você quer imediatamente . De acordo com a documentação, você pode especificar frequências:
fonte
@ 25 command
deve fazer o truque.Deixe-me explicar resumidamente qual é o problema aqui. Digitar 25 no campo minuto faz
cron
com que seja executado quando os minutos do horário atual forem iguais a 25, ou seja, uma vez por hora. Você pode inserir uma lista de correspondências, o problema é que 60 (minutos de uma hora) não é divisível por 25, portanto, você precisa adicionar várias entradas com base na hora. O múltiplo menos comum de 60 e 25 é 300, ou seja, 5 * 60. portanto, você precisará percorrer 5 horas até retornar ao seu início original. por exemplo:0, 25, 50
15, 40
5, 30, 55
20, 45
10, 35
...
Mas aqui novamente, 24 (horas por dia) não é divisível por 5, o múltiplo menos comum de 5 e 24 é simplesmente 5 * 24 = 120. e assim por diante ...
fonte
Você pode jogar com a hora da última modificação de um arquivo
Crie um pequeno script (por exemplo
/usr/local/bin/age
) que produza a idade de um arquivo:Seu crontab ficaria assim (assumindo que 25 minutos equivalem a 1500 segundos, se eu estiver certo)
Observe que eu uso em
/var/tmp
vez de,/tmp
porque, de acordo com o FHS, ele não deve ser excluído no desligamento / inicialização do sistema.fonte
Eu acho que o seguinte deve funcionar 0 0/25 * * *?
fonte