|
| 1 | +Una tarea cron es una operación automatizada programada para ejecutarse en horas o intervalos específicos en sistemas basados en Unix, incluidos Linux y macOS. El término «cron» proviene de «chronos», la palabra griega para tiempo, y representa una de las herramientas más fundamentales de automatización de tareas en la informática moderna. |
| 2 | + |
| 3 | +Las tareas cron permiten a administradores de sistemas y desarrolladores programar operaciones repetitivas sin intervención manual —desde copias de seguridad de bases de datos y rotación de registros hasta generación de informes y mantenimiento del sistema. Al definir cuándo y con qué frecuencia debe ejecutarse una tarea, las tareas cron garantizan que las operaciones críticas se ejecuten de forma coherente y fiable, formando así la columna vertebral de las operaciones automatizadas en millones de servidores en todo el mundo. |
| 4 | + |
| 5 | +Ya sea ejecutar un script de limpieza simple cada día a medianoche u orquestar canalizaciones de datos complejas entre varios sistemas, las tareas cron proporcionan la infraestructura de programación que mantiene las operaciones digitales en funcionamiento las 24 horas del día. |
| 6 | + |
| 7 | +Componentes principales de las tareas cron |
| 8 | + |
| 9 | +(crond) : El servicio en segundo plano que funciona de manera continua y comprueba la tabla de programación cada minuto para determinar qué tareas deben ejecutarse. |
| 10 | + |
| 11 | +Crontab (tabla cron) : El archivo de configuración donde los usuarios definen sus tareas programadas; cada línea representa una tarea separada y su planificación. |
| 12 | + |
| 13 | +Expresión cron : El formato de especificación temporal compuesto por cinco o seis campos (minuto, hora, día del mes, mes, día de la semana y, opcionalmente, año) que define cuándo debe ejecutarse una tarea. |
| 14 | + |
| 15 | +Comando de la tarea : El script, programa o comando que se ejecuta cuando llega el momento programado. |
| 16 | + |
| 17 | +Comprender la sintaxis de las expresiones cron |
| 18 | + |
| 19 | +Las expresiones cron usan un formato de cinco campos para especificar la programación: |
| 20 | + |
| 21 | +* * * * * command-to-execute |
| 22 | + |
| 23 | +│ │ │ │ │ |
| 24 | + |
| 25 | +│ │ │ │ └─── Día de la semana (0-7, tanto 0 como 7 representan domingo) |
| 26 | + |
| 27 | +│ │ │ └────── Mes (1-12) |
| 28 | + |
| 29 | +│ │ └───────── Día del mes (1-31) |
| 30 | + |
| 31 | +│ └──────────── Hora (0-23) |
| 32 | + |
| 33 | +└─────────────── Minuto (0-59) |
| 34 | + |
| 35 | +Ejemplos comunes: |
| 36 | + |
| 37 | + 0 2 * * * – Ejecutar diariamente a las 02:00 |
| 38 | + */15 * * * * – Ejecutar cada 15 minutos |
| 39 | + 0 0 * * 0 – Ejecutar semanalmente los domingos a medianoche |
| 40 | + 0 9-17 * * 1-5 – Ejecutar cada hora de 9:00 a 17:00 en días laborables |
| 41 | + |
| 42 | + |
| 43 | + |
| 44 | +Los operadores utilizados en las expresiones cron permiten definir horarios complejos y específicos: |
| 45 | + |
| 46 | +Asterisco (*): Representa todos los valores posibles para un campo. |
| 47 | + |
| 48 | +Coma (,): Permite especificar una lista de valores. |
| 49 | + |
| 50 | +Guión (-): Define un rango de valores. |
| 51 | + |
| 52 | +Barra inclinada (/): Indica intervalos o pasos a seguir dentro de un rango. |
| 53 | + |
| 54 | + |
| 55 | + |
| 56 | +Para poder definir los cron jobs para un usuario usamos el comando siguiente: |
| 57 | + |
| 58 | +crontab -e |
| 59 | + |
| 60 | +Esto nos abrirá el archivo de los cron jobs en un editor de texto usable por terminal. Los trabajos se tienen que definir en una sintaxis que veremos un poco más adelante. |
| 61 | + |
| 62 | +Revisar cron jobs activos por usuario |
| 63 | + |
| 64 | +Si en cualquier momento necesitas saber qué tareas tienes en un momento dado configuradas puedes usar el comando: |
| 65 | + |
| 66 | +crontab -l |
| 67 | + |
| 68 | +Esto nos permitirá listar las tareas actuales de un usuario. |
| 69 | + |
| 70 | +Ejemplos de cron jobs reales y prácticos |
| 71 | + |
| 72 | +Lo mejor para poder entender la sintaxis de los cron jobs es mostrar algunos ejemplos típicos. Los siguientes ejemplos prácticos serían casos reales de uso de las tareas del cron. |
| 73 | + |
| 74 | +0 2 * * * /home/user/backup.sh |
| 75 | + |
| 76 | +El comando anterior serviría para ejecutar un script llamado backup.sh cada día a las 2 de la mañana. |
| 77 | + |
| 78 | +0 * * * * rm -rf /tmp/* |
| 79 | + |
| 80 | +Esta segunda programación indicaría que se tienen que limpiar archivos temporales (borrando lo que hay en la carpeta /tmp), cada hora. |
| 81 | + |
| 82 | +El comando anterior lo usarías para actualizar paquetes de un servidor Ubuntu, o cualquier otro basado en Debian, todos los domingos a las 4 de la mañana |
| 83 | + |
| 84 | +Para crear una aplicación tipo Cron Job con NATS, lo más eficiente es utilizar NATS JetStream para la persistencia y la programación de mensajes, en lugar de intentar forzar el "Core NATS" a manejar tiempos. JetStream permite definir políticas de retención, entregas garantizadas y, mediante el uso de KV (Key-Value) o durabilidad, programar tareas periódicas. |
| 85 | +Pasos para Crear un Cron Job con NATS |
| 86 | + |
| 87 | + Instalar NATS y JetStream: Asegúrese de tener un servidor NATS configurado con JetStream habilitado, por ejemplo, usando Docker: docker run -p 4222:4222 -ti nats:latest -js. |
| 88 | + Configurar un Stream: Defina un stream en JetStream donde se publicarán los mensajes de "trabajo" (ej. tasks_stream). |
| 89 | + Productor (Cron Job): Una aplicación cliente publica un mensaje en el stream tasks_stream a intervalos regulares, simulando el cron job (ej. usando la librería node-cron en Node.js o cron en Go para disparar la publicación). |
| 90 | + Consumidor (Trabajador): Una aplicación se suscribe al stream utilizando un consumidor duradero (Durable Consumer). Este trabajador procesará el mensaje. NATS asegura que, si el trabajador cae, al reiniciar procesará el mensaje pendiente. |
| 91 | + |
| 92 | +Ejemplo Básico (Concepto en Go/Node) |
| 93 | + |
| 94 | + Productor: nc.Publish("cron.job.update", []byte("ejecutar_tarea")) (Llamado cada X tiempo). |
| 95 | + Consumidor: js.PullSubscribe("cron.job.update", "durable-worker") (Procesa el mensaje). |
| 96 | + |
| 97 | + |
| 98 | + |
| 99 | +Alternativa NATS KV |
| 100 | + |
| 101 | +El CRON externo actualiza una clave en NATS KV |
| 102 | +El worker escucha los cambios en esa clave y ejecuta la tarea cada vez que el valor cambia |
| 103 | + |
| 104 | +Esta solucion permite que la programacion y la ejecucion esten desacopladas, distriuidas totalmente por NATS |
0 commit comments