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
13
El comando en crontab se ejecuta con /bin/sh
lo 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
cron
ejecutará 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_command
funcione a la misma hora todos los días, pero va a ejecutar cada 25 minutos.
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.
fuente
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:
fuente
@ 25 command
debería hacer el truco.Permítanme explicar brevemente cuál es el problema aquí. Ingresar 25 en el campo de minutos hace
cron
que 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 ...
fuente
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:Su crontab se vería así (suponiendo que 25 minutos equivalen a 1500 segundos si tengo razón)
Tenga en cuenta que uso en
/var/tmp
lugar de/tmp
porque de acuerdo con el FHS no se supone que se elimine al apagar / iniciar el sistema.fuente
Creo que lo siguiente debería funcionar 0 0/25 * * *?
fuente