CronJob cada 25 minutos

13

Quiero saber si hay una manera más fácil de ejecutar un trabajo cada 25 minutos. En cronjob, si especifica el parámetro de minuto como * / 25, se ejecutará solo en los minutos 25 y 50 de cada hora

Pappu
fuente

Respuestas:

15

El comando en crontab se ejecuta con /bin/shlo que puede usar la expansión aritmética para calcular si el minuto actual módulo 25 es igual a cero:

*/5 * * * * [ $(( $(date +\%s) / 60 \% 25 )) -eq 0 ] && your_command

cronejecutará esta entrada completa cada 5 minutos, pero solo se ejecutará si el minuto actual (en minutos desde la época) módulo 25 es igual a cero your_command.

Como otros han señalado, 1 de día no es divisible por 25 minutos, así que esto no hará que your_commandfuncione a la misma hora todos los días, pero va a ejecutar cada 25 minutos.

camh
fuente
simplemente genial ...
Tomás
Tenga en cuenta que con la implementación cron del ISC, al menos, deberá escapar de esos% caracteres con barra invertida.
Stéphane Chazelas
@ StéphaneChazelas, buen punto. Seguí adelante y agregué las barras diagonales inversas antes de los signos de porcentaje porque, hasta donde yo sé, cada implementación de cron requiere esto.
CÓDIGO-LEA
7

Su mejor apuesta es correr a los 20 minutos o 30 minutos.

Lo mejor que puede hacer es disparar cada 5 minutos, y luego mantener un conteo interno o una marca de tiempo, y ejecutar cada 5to disparador, o si han transcurrido 25 minutos desde la última ejecución.

Más complicado sería calcular las horas correctas para un día, a partir de la medianoche, y aceptar el error al final del día. Esto implicaría duplicar la entrada crontab a las diferentes horas.

Más complicado que eso sería calcular los tiempos durante un mes completo, lo que implicaría muchas copias de la entrada crontab para cubrir las diferentes combinaciones.

Finalmente, podrías implementar el tuyo siempre en daemon y hacer que haga la programación.

Douglas Leeder
fuente
6

No tengo experiencia directa con él, pero parece que fcron hace lo que quieres fuera de la caja. De acuerdo con su documentación , puede especificar frecuencias:

# 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
fuente
¿Dónde ves 25 minutos aquí?
Philomath
Usando fcron y @ 25 commanddebería hacer el truco.
Caleb
Gracias Caleb Debería haber creado un ejemplo a medida en lugar de sacar uno directamente de la documentación.
che2cbs
2

Permítanme explicar brevemente cuál es el problema aquí. Ingresar 25 en el campo de minutos hace cronque se ejecute cuando los minutos de la hora actual son 25, es decir, una vez por hora. Puede ingresar una lista de coincidencias, el problema es que 60 (minutos de una hora) no es divisible por 25, por lo que debe agregar varias entradas en función de la hora. El mínimo común múltiplo de 60 y 25 es 300, es decir 5 * 60. por lo que deberá recorrer 5 horas hasta volver a su inicio original. por ejemplo:

0, 25, 50
15, 40
5, 30, 55
20, 45
10, 35
...

Pero aquí nuevamente, 24 (horas al día) no es divisible por 5, el mínimo común múltiplo de 5 y 24 es simplemente 5 * 24 = 120. y así sucesivamente ...

Philomath
fuente
Quizás la respuesta debería haber sido un comentario sobre la pregunta original.
Philomath
1

Puedes jugar con la última hora de modificación de un archivo

  • Cree un pequeño script (por ejemplo /usr/local/bin/age) que muestre la antigüedad de un archivo:

    #bin/sh
    echo $(( $( date +%s ) - $( stat -c %Z $1 ) ))
    

Su crontab se vería así (suponiendo que 25 minutos equivalen a 1500 segundos si tengo razón)

* * * * *  [ $(/usr/local/bin/fileage /var/tmp/your_command.offset) -gt 1500  ] && touch /var/tmp/your_command.offset && your_command

Tenga en cuenta que uso en /var/tmplugar de /tmpporque de acuerdo con el FHS no se supone que se elimine al apagar / iniciar el sistema.

SamK
fuente
-2

Creo que lo siguiente debería funcionar 0 0/25 * * *?


fuente
Según mi conocimiento, funcionará por cada minuto.
Eso se ejecutaría en la hora una vez cada ... ¿25 horas? 0/25 ... ni siquiera estoy seguro de lo que hace, pero no es lo que busca el OP.
Caleb