Respostas:
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.
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:
# Get our mails every 30 minutes
@ 30 getmails -all
# make some security tests every 48 hours of system up time,
# force a mail to be sent to root even if there is no output
@mailto(root),forcemail 2d /etc/security/msec/cron-sh/security.sh
@ 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 ...
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:
#bin/sh
echo $(( $( date +%s ) - $( stat -c %Z $1 ) ))
Seu crontab ficaria assim (assumindo que 25 minutos equivalem a 1500 segundos, se eu estiver certo)
* * * * * [ $(/usr/local/bin/fileage /var/tmp/your_command.offset) -gt 1500 ] && touch /var/tmp/your_command.offset && your_command
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.
Eu acho que o seguinte deve funcionar 0 0/25 * * *?