La Expresión 0 * * * *
La expresión cron 0 * * * * ejecuta un trabajo en el minuto 0 de cada hora. Los cinco campos son minuto, hora, día del mes, mes, día de la semana. Configurar el minuto a 0 y usar * para todo lo demas significa que el trabajo se ejecuta a las 00:00, 01:00, 02:00, etc., exactamente 24 veces al día.
Por qué el Campo de Minutos Importa
La mayor fuente de trabajos cron desbocados es confundir * * * * * con 0 * * * *.
* * * * * # se ejecuta cada minuto, 1440 veces al día
0 * * * * # se ejecuta cada hora, 24 veces al día
Si quieres un trabajo por hora y escribes * * * * *, no notaras el problema hasta que revises tus logs y veas que se ha estado ejecutando todo el día.
El Acceso Directo @hourly
La mayoría de las implementaciones cron soportan un conjunto de accesos directos @:
| Acceso directo | Equivalente |
|---|---|
@hourly | 0 * * * * |
@daily | 0 0 * * * |
@weekly | 0 0 * * 0 |
@monthly | 0 0 1 * * |
@yearly | 0 0 1 1 * |
@reboot | se ejecuta una vez al inicio |
Escalonar Trabajos por Hora
Si tienes multiples servicios y todos ejecutan trabajos por hora, programarlos todos como 0 * * * * crea un grupo a la hora en punto. Todo se ejecuta simultáneamente, las bases de datos reciben golpes al mismo tiempo.
La solución es desplazar cada trabajo unos minutos:
0 * * * * /opt/jobs/report-generator
7 * * * * /opt/jobs/cache-warmer
14 * * * * /opt/jobs/data-sync
21 * * * * /opt/jobs/cleanup
Cuando la Opción por Hora es la Correcta
Generación de informes
Los resumenes por hora son un limite natural para paneles que muestran metricas de la ‘última hora’.
Sincronización de API externas
Si extraes datos de un servicio externo y los datos cambian como máximo una vez por hora, sondear más frecuentemente es desperdiciar cuota.
Tareas de limpieza
Eliminar archivos temporales, limpiar entradas de cache caducadas o archivar registros antiguos a menudo se hace por hora.