CronJob a cada 25 minutos

13

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

Pappu
fonte

Respostas:

15

O comando no crontab é executado com, /bin/shpara 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

cronexecutará 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_commandcom que seja executado no mesmo horário todos os dias, mas será executado a cada 25 minutos.

camh
fonte
simplesmente genial ...
Tomas
Observe que, com a implementação cron do ISC, você precisará escapar desses% caracteres com barra invertida.
Stéphane Chazelas
@ StéphaneChazelas, bom ponto. Fui em frente e adicionei as barras invertidas antes dos sinais de porcentagem, porque, para meu conhecimento, toda implementação do cron exige isso.
COD-REaD
7

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.

Douglas Leeder
fonte
6

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
che2cbs
fonte
Onde você vê 25 minutos aqui?
Philomath 21/07
Usando fcron e @ 25 commanddeve fazer o truque.
Caleb
Obrigado Caleb. Eu deveria ter criado um exemplo personalizado em vez de retirar um diretamente da documentação.
che2cbs 21/07
2

Deixe-me explicar resumidamente qual é o problema aqui. Digitar 25 no campo minuto faz croncom 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 ...

Philomath
fonte
Talvez a resposta devesse ter sido um comentário sobre a pergunta original.
Philomath 21/07
1

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/tmpvez de, /tmpporque, de acordo com o FHS, ele não deve ser excluído no desligamento / inicialização do sistema.

SamK
fonte
-2

Eu acho que o seguinte deve funcionar 0 0/25 * * *?


fonte
De acordo com meu conhecimento, funcionará a cada minuto.
Isso seria executado uma hora a cada ... 25 horas? 0/25 ... nem tenho certeza do que isso faz, mas não é o que o OP está buscando.
Caleb