Tareas Programadas (Cron Jobs): Para Cuando Tu Horario de Sueño Importa

por Matt Stamp
Tareas Programadas (Cron Jobs): Para Cuando Tu Horario de Sueño Importa thumbnail

¿Quieres despertarte a las 2 a.m., limpiar los registros, eliminar archivos temporales y ejecutar las mismas tareas de mantenimiento del servidor todos los días?

Pues, yo tampoco. Ni los millones de administradores de servidores que gestionan los más de 14 mil millones de servidores en todo el mundo.

Así que, ¡detén la locura, te lo suplico!

Los cron jobs están hechos para eso.

Porque, sinceramente, nada dice “administrador de sistemas competente” como estar profundamente dormido y recibir crédito por el trabajo que tus scripts hacen por ti. Se llama “utilizar tus recursos”.

Con cron jobs:

  • Tu jefe piensa que eres dedicado.
  • Tu servidor sabe que eres perezoso.
  • Tienes una hermosa relación simbiótica llamada automatización.

Hoy, vas a convertirte en un experto en cron jobs.

Primero, ¿Qué es un Cron Job? (La Versión No Aburrida)

Un cron job es esencialmente un programador de tareas integrado en sistemas operativos similares a Unix (Linux, macOS) que te permite ejecutar comandos de Linux automáticamente en momentos y fechas especificadas.

Piénsalo como una lista de tareas para tu servidor, pero… esta realmente se completa.

Cron en Metáforas

Si tu infraestructura de servidor fuera un restaurante:

  • El cron daemon es el gerente que revisa el horario diario.
  • El crontab es la pizarra de asignaciones del personal.
  • Cada cron job es una tarea asignada a un miembro del personal en un momento específico.
  • El comando es el trabajo real que se está realizando.

Cuando el reloj marca la hora programada, el gerente toca al empleado asignado en el hombro y le dice: “¡Es hora de actuar!”

El empleado luego ejecuta su tarea sin preguntas ni quejas.

¡Si tan solo los humanos fuéramos tan confiables, el mundo sería un lugar diferente!

La Anatomía de un Cron Job

Cada cron job consta de dos partes principales:

  1. Cuándo ejecutar (el horario)
  2. Qué ejecutar (el comando o script a ejecutar)

El horario utiliza una sintaxis específica que, a primera vista, puede parecer algo de magia computacional:

Diagrama que explica los componentes de la sintaxis de crontab: minuto (0-59), hora (0-23), día del mes (1-31), mes (1-12), día de la semana (0-7) y el comando a ejecutar.

Pero mira más de cerca y comenzará a tener sentido.

Cada asterisco puede ser reemplazado por valores específicos, rangos o intervalos para crear exactamente el horario que necesitas.

Por Qué a Los Administradores de Servidores Aman los Cron Jobs

Hay una razón por la que los administradores de servidores (incluso yo) se emocionan al hablar de los cron jobs.

Convierten la administración del servidor en algo que (al menos remotamente) se asemeja al equilibrio entre el trabajo y la vida personal.

1. Te Ahorran Tiempo 

¿Recuerdas el tiempo? Ese recurso del que nunca tienes suficiente. Los cron jobs te lo devuelven. Los configuras, los olvidas y prácticamente nunca los miras.

(Bueno, hasta que se rompen o necesitas cambiar el horario.)

2. Mantienen la Consistencia

Los humanos somos inconsistentes. Olvidamos cosas. Cometemos errores tipográficos. Nos distraemos con videos de gatos. Los cron jobs realizan la misma tarea, de la misma manera, cada vez — sin excepciones.

3. Tu Servidor Nunca Duerme

Con los cron jobs, el mantenimiento esencial ocurre 24/7/365, ya sea que estés despierto, dormido o en la playa tomando margaritas.

4. Los Registros de Errores > La Memoria Humana

Cuando realizas tareas manualmente, ¿puedes recordar exactamente qué hiciste y cuándo lo hiciste? Probablemente no.

Pero los cron jobs pueden configurarse para registrar su actividad, creando un rastro de papel de todas las acciones automatizadas para la solución de problemas y verificación.

5. Están Diseñados para Escalar 

A medida que tu infraestructura crece, gestionar todo manualmente se vuelve exponencialmente más difícil. Los cron jobs escalan sin esfuerzo.

Es decir, el mismo trabajo puede ejecutarse en múltiples servidores sin requerir tiempo adicional de tu parte.

Recibe contenido directamente en tu bandeja de entrada

Suscríbete ahora para recibir todas las últimas actualizaciones, directamente en tu bandeja de entrada.

Configurar Cron Jobs: Guía Paso a Paso

¡Suficiente teoría! Necesitas ensuciarte las manos con una configuración práctica de cron jobs.

Paso 1: Confirmar que Cron Está Instalado

La mayoría de los sistemas similares a Unix ya tienen cron preinstalado. Para verificar si está disponible para su uso, escribe el siguiente comando:

crontab -e

Dependiendo del editor predeterminado, el comando abrirá el crontab en tu editor específico. Si nunca has usado crontab antes, es posible que te pida que configures el editor predeterminado.

Archivo crontab en un editor de texto que muestra una tarea programada para ejecutarse cada minuto, hora, día, mes y día de la semana, ejecutando el comando echo 'foo'.

Si el terminal responde con “command not found“, necesitarás instalar cron con los siguientes comandos:

  • On Ubuntu/Debian: sudo apt update && sudo apt install cron
  • On CentOS/RHEL:  sudo yum install cronie

Una vez hecho esto, inicia y habilita el servicio cron:

sudo systemctl start cronsudo systemctl enable cron

Con los comandos de start y enable, estamos iniciando el servicio cron para ejecutar los cron jobs.

Y con “enable“, nos aseguramos de que, incluso si tu servidor se reinicia, el servicio cron se reinicie automáticamente con él, y no se pierdan cron jobs.

Nota para geeks: CentOS llama al servicio cron “crond”, por lo que necesitarás iniciar y habilitar el servicio crond.

Paso 2: Entendiendo el Crontab

Muy bien, abre el crontab o la tabla de cron para comenzar a agregar tus trabajos programados.

Cada usuario en el sistema puede tener su propio archivo crontab. Además, existe un crontab a nivel de sistema.

Para editar tu crontab personal:

crontab -e

Esto abrirá tu archivo crontab en el editor de texto predeterminado. Si es tu primera vez, elige el editor nano (opción 1), ya que es el más fácil para principiantes.

Para crontabs a nivel de sistema, ejecuta el siguiente comando con privilegios de sudo:

sudo nano /etc/crontab
Terminal que muestra el archivo crontab con una tarea programada para ejecutarse continuamente para el usuario "dreamhost", ejecutando el comando echo 'Welcome'.

Paso 3: Sintaxis del Cron Job

Ya hemos hablado sobre la estructura básica en la anatomía de los cron jobs antes.

Pero crear un cron job puede ser confuso a veces. Crontab.guru te ayuda a visualizar los horarios de los trabajos a medida que los escribes.

Interfaz de Crontab Guru que muestra la expresión "5 4 * 12 6" explicada como "A las 04:05 los sábados de diciembre", con la próxima ejecución el 06-12-2025 a las 04:05:00.

Ahora vamos a lo divertido: escribir nuestro primer cron job. Echemos un vistazo a algunos horarios comunes de cron jobs:

Cada minuto:

* * * * * /path/to/command

Cada hora en el minuto 0:

0 * * * * /path/to/command

Cada día a la medianoche:

0 0 * * * /path/to/command

Cada lunes a las 3 a.m.:

0 3 * * 1 /path/to/command

Cada 15 minutos:

*/15 * * * * /path/to/command

El primer día de cada mes a las 6:30 a.m.:

30 6 1 * * /path/to/command

Paso 4: Crear tu Primer Cron Job

Pasemos a crear un cron job simple para hacer copias de seguridad de tu servidor.

La siguiente tarea crea una copia de seguridad de tu sitio web todos los días a las 2 a.m.:

0 2 * * * tar -czf /path/to/backup/website-backup-$(date +%Y%m%d).tar.gz /path/to/your/website

Esto generará un archivo tar comprimido de tu directorio de sitio web con la fecha actual como nombre de archivo.

Paso 5: Guardar y Verificar

Ahora, sal del editor. En nano, presiona Ctrl+X y luego presiona Y.

Para ver tu crontab actual y verificar que tu trabajo fue agregado:

crontab -l
Horario de crontab que muestra una tarea automatizada programada para ejecutarse a las 12:15 todos los lunes, con los campos configurados como "15 12 * * 1" seguido de un comando.

¡Eso es todo! Tu primer cron job ya está configurado y se ejecutará automáticamente en el horario programado.

Ejemplos Prácticos de Cron Jobs para Administradores de Sitios Web

Ahora que conoces lo básico, exploremos algunos cron jobs prácticos que pueden hacer tu vida como administrador de sitios web significativamente más fácil.

Copia de Seguridad de Base de Datos

Copia de seguridad de la base de datos MySQL (diariamente a la 1 a.m.):

0 1 * * * mysqldump -u username -p’password’ database_name | gzip > /path/to/backups/db-backup-$(date +%Y%m%d).sql.gz

Rotación y Limpieza de Registros

Limpiar los registros que tengan más de 7 días (semanalmente los domingos):

0 0 * * 0 find /path/to/logs -type f -name “*.log” -mtime +7 -delete

Monitoreo de Rendimiento del Sitio Web

Comprobar el tiempo de respuesta del sitio web cada 5 minutos:

*/5 * * * * curl -o /dev/null -s -w “%{http_code} %{time_total}sn” example.com >> /path/to/logs/website-performance.log

Actualizaciones de Contenido

Obtener y actualizar contenido dinámico (cada hora):

0 * * * * /path/to/content-update-script.sh

Informes por Correo Electrónico

Enviar un resumen semanal de tráfico todos los lunes a las 9 a.m.:

0 9 * * 1 /path/to/generate-and-email-report.sh

Escaneos de Seguridad

Ejecutar un script de escaneo de seguridad todas las noches a las 3 a.m.:

0 3 * * * /path/to/security-scan.sh

Mejores Prácticas de Cron Jobs: Qué Hacer y Qué No Hacer

Para asegurarte de que tus cron jobs se ejecuten sin problemas y no causen más problemas de los que resuelven, aquí tienes algunas prácticas recomendadas importantes.

Qué Hacer

  1. Siempre usa rutas completas para los comandos y archivos: Tu entorno de cron no tiene el mismo PATH que tu shell de usuario, así que “/usr/bin/python” es mejor que solo python.
  2. Redirige la salida para evitar el spam de correos electrónicos: Por defecto, cron envía cualquier salida por correo electrónico al usuario. Añade >/dev/null 2>&1 para suprimir la salida o redirigirla a un archivo de registro.
  3. Prueba tus comandos antes de programarlos: Ejecuta tu comando manualmente para asegurarte de que funciona como se espera.

Añade comentarios para explicar cada tarea — Tu futuro yo te lo agradecerá por documentar lo que hace cada cron job y por qué.

# Daily database backup – Added by Jane on 2023-05-15
0 1 * * * /path/to/backup-script.sh

Considera usar archivos de bloqueo para trabajos de larga duración para evitar que una nueva instancia se inicie si la anterior aún está en ejecución.

0 * * * * flock -n /tmp/script.lock /path/to/your/script.sh

Lo que No Debes Hacer

  1. No programes trabajos intensivos en recursos durante las horas pico: Tu copia de seguridad no necesita ejecutarse al mediodía cuando tu sitio está más ocupado.
  2. No uses rutas relativas: “./script.sh” casi seguramente fallará en cron.
  3. No olvides las variables de entorno: Cron no carga tu .bashrc ni .profile. Establece las variables necesarias en el crontab o en el script.
  4. No pases por alto los registros: Sin un registro adecuado, depurar cron jobs puede ser una pesadilla.
  5. No te excedas: Demasiados cron jobs frecuentes pueden sobrecargar tu servidor. Sé estratégico.

Qué Hacer Cuando los Cron Jobs No Funcionan

La única vez que debes revisar un cron job es cuando falla — y cuando falla, aquí te explicamos cómo diagnosticar y solucionar problemas comunes.

Problema Común #1: El Trabajo No Se Ejecuta

Síntomas: Tu tarea programada parece no ejecutarse en absoluto.

Posibles soluciones:

  • Verifica que el demonio de cron esté en ejecución: El estado de “systemctl” cron
  • Verifica la sintaxis de tu crontab: Usa una herramienta como crontab.guru
  • Asegúrate de usar rutas completas para los ejecutables: ¿Qué comando usar para encontrar rutas completas?
  • Verifica los permisos de los archivos: Los scripts deben ser ejecutables (chmod +x script.sh)

Problema Común #2: El Trabajo Se Ejecuta Pero Falla

Síntomas: El trabajo se ejecuta, pero no completa su tarea correctamente.

Posibles soluciones:

  • Redirige la salida a un archivo de registro para ver los errores:
* * * * * /path/to/script.sh > /path/to/script.log 2>&1
  • Prueba el comando manualmente con el mismo entorno.
  • Verifica las dependencias que podrían faltar en el entorno de cron.

Problema Común #3: Inundación de Correos Electrónicos

Síntomas: Tu bandeja de entrada está inundada con correos electrónicos de salida de cron.

Posibles soluciones:

  • Redirige la salida a null: >/dev/null 2>&1
  • Redirige a un archivo de registro: >/path/to/logfile.log 2>&1

Solo envía correos electrónicos en caso de errores:

* * * * * /path/to/script.sh >/dev/null || echo “Script failed” | mail -s “Cron failure” [email protected]

Problema Común #4: Problemas de Tiempo

Síntomas: Los trabajos se ejecutan en momentos o frecuencias inesperadas.

Posibles soluciones:

  • Verifica nuevamente la configuración de tu zona horaria — la fecha frente a la expectativa de cron.
  • Ten en cuenta los cambios de horario de verano que pueden afectar el tiempo.
  • Usa marcos de tiempo explícitos en lugar de relativos cuando la precisión sea importante.

Técnicas Avanzadas de Escritura de Cron Jobs

Hemos cubierto lo básico, y ahora ya eres prácticamente un experto en cron jobs. Pero esta sección te llevará un paso más allá.

Usando Cadenas Especiales

No siempre necesitas escribir cron jobs con esos signos de asterisco. Hay algunas cadenas especiales que te permiten configurar cron jobs de manera muy sencilla.

  • @yearly o @annually: Ejecutar una vez al año (0 0 1 1 *)
  • @monthly: Ejecutar una vez al mes (0 0 1 * *)
  • @weekly: Ejecutar una vez a la semana (0 0 * * 0)
  • @daily o @midnight: Ejecutar una vez al día (0 0 * * *)
  • @hourly: Ejecutar una vez por hora (0 * * * *)
  • @reboot: Ejecutar una vez al arrancar

Por ejemplo, si quieres que algo se ejecute diariamente, solo escribe el siguiente comando:

@daily /ruta/al/script-de-respaldo-diario.sh

Variables de Entorno en Crontab

Para evitar repetir una cadena una y otra vez en tus cron jobs (por ejemplo, una ruta específica o tu correo electrónico de administrador), configura variables de entorno al principio de tu crontab.

Luego, puedes reutilizar las variables según sea necesario dentro de tus scripts o comandos.

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[email protected]

# This job will send errors to [email protected]
0 2 * * * /path/to/mailing_script.sh

Si usamos la variable de entorno MAILTO en nuestro script-de-correo.sh, el script enviará automáticamente un correo electrónico a la dirección de correo correcta.

Con esto, cambiar el correo del administrador solo requerirá cambiar el valor de la variable MAILTO, en lugar de hacer cambios en todos los scripts.

Ejecutando Trabajos Como Diferentes Usuarios

Si tienes acceso de superusuario, puedes editar el crontab de otro usuario:

sudo crontab -u username -e

Usando Anacron para Máquinas que No Están Siempre Encendidas

A diferencia de cron, anacron asegura que los trabajos se ejecuten incluso si la computadora estaba apagada durante la hora programada:

sudo apt install anacron

Edita /etc/anacrontab para agregar trabajos que se ejecutarán cuando el sistema vuelva a estar en línea.

Encadenamiento de Trabajos para Flujos de Trabajo Complejos

Ejecutar trabajos en secuencia:

0 1 * * * /path/to/first-script.sh && /path/to/second-script.sh

Monitoreo de Cron Jobs

Para una gestión seria de servidores, considera herramientas como Cronitor, que proporcionan monitoreo y alertas para tus cron jobs.

0 * * * * cronitor exec check-12345 — /path/to/your/script.sh

Hablemos de Costos

Los cron jobs no pueden existir en aislamiento. Necesitan un servidor y un servicio ejecutándose en un servidor que necesitas gestionar.

Ahora, si estás leyendo este artículo, es muy probable que tengas un servidor para tu sitio web o aplicación.

De hecho, si estás alojado con DreamHost VPS o cualquier proveedor de hosting basado en Linux, ya tienes todo lo necesario para comenzar a automatizar tus tareas de gestión de servidor.

Si no, un VPS de $10 USD/mes es todo lo que necesitarías, especialmente cuando estás comenzando.

Para aquellos que ya están ejecutando un DreamHost VPS, el proceso no podría ser más sencillo: 

  1. Conéctate a tu servidor mediante SSH.
  2. Ejecuta crontab -e para editar tu tabla de cron personal.
  3. Agrega tus tareas programadas.
  4. Guarda y deja que la automatización comience.
Glosario de DreamHost

SSH

Secure Shell Protocol (SSH) es un protocolo criptográfico de red para ejecutar servicios de manera segura a través de una red no segura. Se usa principalmente para ejecuciones de línea de comandos e inicios de sesión remotos.

Ver más

Eso es todo. La infraestructura por la que ya estás pagando de repente se vuelve más valiosa y eficiente.

El Nuevo Piloto Automático de Tu Servidor

¡Felicidades! 

Has pasado de la mano de obra manual a la magia de la automatización. Con los cron jobs manejando el mantenimiento rutinario, las copias de seguridad y el monitoreo, ahora puedes enfocarte en hacer crecer tu sitio web y negocio en lugar de estar pendiente del servidor.

Y recuerda, será un proceso. La automatización se volverá más sofisticada a medida que vayas agregando más y más tareas.

Pero por ahora, comienza con algunos cron jobs esenciales, monitorea cómo funcionan y gradualmente expande tu automatización a medida que te sientas más cómodo con el proceso.

Ahora ve y toma esa siesta, porque acabas de ahorrarte una cantidad enorme de tiempo.

Recibe contenido directamente en tu bandeja de entrada

Suscríbete ahora para recibir todas las últimas actualizaciones, directamente en tu bandeja de entrada.