Digamos que tengo varios scripts cron que deben ejecutarse cada 15 minutos. Podría configurarlos para que se ejecuten */15 * * * *
, pero luego todos se ejecutan al mismo tiempo. Parece una tontería que el servidor permanezca inactivo durante varios minutos y luego de repente intente ejecutar una docena de scripts al mismo tiempo.
¿Hay alguna forma de ejecutar un script en el minuto 1, 16, 31, 46 y otro en 2, 17, 32, 47?
En otras palabras, quiero que cada script se ejecute cada 15 minutos, pero no me importa que se ejecuten específicamente en las marcas de cuarto de hora.
run-parts
también está presente en los sistemas Fedora / Red Hat.La forma más sencilla de hacerlo es configurar manualmente los comandos para que se ejecuten cuando desee:
O puede escribir un script para generar automáticamente las entradas de crontab apropiadas (que evitan errores tipográficos).
Algunas versiones de cron (probablemente la que está usando) aceptan una sintaxis extendida:
fuente
Cron no es realmente bueno en lo que intentas hacer. ¿Has considerado escribir un script que actúa como un demonio que básicamente duerme 15 minutos, ejecuta el comando y luego realiza un bucle?
fuente
sleep 300
entre cada ejecución del comando, la propia ejecución del comando hará que el tiempo se desvíe; podría ejecutarse cada 15:10 en lugar de cada 15:00. Y si el proceso en segundo plano muere o el sistema se reinicia, a diferenciacrond
, no se reiniciará automáticamente. Hay formas de "demonizar" un proceso en segundo plano, pero luego se está implementando más o menoscrond
.run-parts
que se envía con la mayoría de las instalaciones cron para hacer eso específicamente. Ver la respuesta de @ AndrewSchulman.Muchas distribuciones tienen /etc/cron.d/cronhourly, por lo que todos los scripts se ejecutan cada hora. Incluso puede especificar el orden comenzándolos con números secuenciales, como 01scriptA 02scriptB: debería ser trivial con el conocimiento cron que ya tiene para fabricar un "cronhourlybyfour" como lo llamamos en la base de distribución de Linux de Smoothwall :)
Palabra de advertencia: esto usa run-parts como se sugirió anteriormente, y run-parts NO le gustan los scripts con a. en el nombre, así que no lo llame "deletehomefolders.sh" llámelo "01deletehomefolders" y asegúrese de comenzar con el # correcto. línea para lo que sea que intente interpretar su script.
fuente