Automatización en la gestión de servidores con cron
Como sabemos, ejecutar una tarea rutinaria una y otra vez hace de las labores de gestión de sistemas algo monótono y allí entra en juego la automatización para permitir que nuestros recursos se enfoquen en tareas de mayor valor. Cron es un gestor de tareas que habilita su automatización, desde actualizar una base de definiciones de un antimalware, crear un backup de una base de datos o verificar y advertir sobre la capacidad de un SSD; en otras palabras, hace posible la ejecución de una rutina que nos ahorra un valioso tiempo.
¿Qué es un cron?
Cron es un programa desatendido, propio de sistemas operativos como Linux, GNU y otros sistemas tipo Unix que comparten una arquitectura similar. Se trata de una funcionalidad nativa de estos sistemas operativos que permite a los usuarios y desarrolladores ingresar una serie de comandos, que habilitan la ejecución de una tarea de manera automática cada cierto intervalo de tiempo.
A cada una de las distintas tareas que puede ejecutar un cron se les llama Cron Jobs y los usuarios con cierto nivel de conocimiento en programación Unix pueden parametrizar el tipo de tarea que desean automatizar y cada cuánto tiempo.
¿Cómo funciona cron y para qué sirve?
En sistemas operativos tipo Unix, un cron puede parametrizar o automatizar muchas tareas a través de un archivo de comandos simples.
El catálogo de tareas para ejecutar se lista a través de un archivo llamado Crontab; su configuración elemental difiere según el sistema operativo.
Los sistemas tipo Unix permiten varios usuarios con perfil de administradores, quienes tienen los permisos para crear y actualizar la lista de rutinas en Crontab.
Cada administrador puede parametrizar las rutinas o tareas que considere monótonas y que puedan ejecutarse en segundo plano instruyendo la serie de comandos para realizar los trabajos en cualquier momento que desee.
Estos son algunos de las tareas más comunes que se parametrizan con un cron:
- Cualquier labor de mantenimiento de sistema
- El monitoreo de capacidad de un servidor y crear reporte
- Seguimiento del espacio en disco
- La programación de back-ups o copias de seguridad
- Verificación de enlaces rotos
- Borrado de caché de los equipos previo a su desconexión
- Eliminar registros no necesarios
- Actualizaciones de bases de datos
- Enviar una notificación de un proceso específico
- Actualizaciones de seguridad
En definitiva, el espectro de tareas que se pueden programar con un Cron Job es amplio y de mucha utilidad, no solo para administradores de sistemas sino para programadores y desarrolladores web.
Por su naturaleza son de mucha ayuda para la gestión de infraestructura TI que opere 24/7 como servidores. Cron es una herramienta especialmente útil para automatizar la gestión de un servidor. Aquí te contamos qué es un servidor y sus tipos.
Algunas limitaciones de cron
Como la mayoría de los subprogramas, el campo de usos o implementaciones de un cron en Unix podría ser más amplio debido a sus limitaciones.
Estas son algunos ejemplos de trabajos que no pueden programarse vía cron:
- Rutinas o tareas que deban ejecutarse en períodos de tiempo menor a 1 minuto. Ello porque el mínimo intervalo de tiempo en la sintaxis de este daemon es 60 segundos. Es decir que una rutina ejecutada no podrá repetirse sino pasados 59 segundos.
- Centralizado a un solo servidor o terminal: un Cron Job no podrá ejecutarse en red, es decir distribuirse en varios servidores o terminales en red.
- Si el servidor o infraestructura reporta algún error, las tareas programadas vía cron no podrán ejecutarse, cualquier mantenimiento o rutina perdida deberá ser ejecutada por el personal de manera manual.
- Lo anterior está relacionado con la ausencia del mecanismo de reintento automático, si en un momento la tarea deja de ejecutarse, solo podrá llevarse a cabo para el próximo intervalo de tiempo programado.
- Por lo anterior un cron no es el mejor recurso para programar tareas incrementales, como CI/CD de un software de ambiente de prueba a desarrollo.
Por la sintaxis propia de un cron, resultan idóneos para tareas simples y repetitivas cuya ejecución se programa para períodos mayores de 1 minuto.
La sintaxis de un cron
En este artículo no entraremos en los detalles de los comandos propios de cron porque podrían diferir según se hable de Unix o Linux (o versiones de GNU), pero sí algo más característico de lo qué es cron y para qué sirve, su sintaxis.
Linux.com muestra el formato típico de un comando cron:
Minuto(0-59)_Hora(0-24)_Día_de_mes(1-31)_Mes(1-12)_Día_de_semana(0-6)_Comando_para_ejecutar
Lo que quiere decir que la sintaxis de un comando cron (Cron Job sintaxis) consta de 5 niveles o campos:
- Minuto: el minuto en que se ejecutará una tarea específica
- Hora: en formato o notación de 24 horas
- Día de mes: el número de día en que el usuario o administrador desea que se corra una rutina
- Mes: en que se llevará a cabo determinada tarea
- Día de la semana: 0 para domingo, 6 para sábado (según sea el sistema operativo para otros va de 1 a 7)
- El comando o tarea que se ejecutará.
Ponemos un ejemplo de una sintaxis tomada de Linux.org:
0 2 * * * /path/to/backup_cleanup.sh
Se trata de una tarea de limpieza de registros de soporte en Linux no necesarios que se ejecutará todos los días del año a las 2 de la madrugada.
Hemos podido ver cómo cron es un recurso ideal para programar tareas en ambientes tipo Linux que de otra manera resultarían monótonas y consumirían un importante tiempo.
Es una excelente herramienta para administradores de sistemas, gestores de servidores y desarrolladores en sistemas tipo GNU y arquitecturas similares y, como toda automatización, representa ahorros en recursos para ser destinados en tareas de mayor productividad y valor.