Cron jobs en Linux paso a paso: qué son, cómo funcionan y cómo automatizar tareas


Introducción


Uno de los mayores poderes de Linux es la automatización. Y si hay una herramienta clásica, práctica y todavía muy utilizada para eso, es cron.

Gracias a cron puedes decirle al sistema que ejecute tareas automáticamente en un momento concreto o en intervalos regulares. Eso significa que puedes programar procesos sin tener que estar presente cada vez.


Por ejemplo, con cron puedes:

  • hacer respaldos automáticos
  • limpiar archivos temporales
  • ejecutar scripts de mantenimiento
  • reiniciar servicios en ciertos horarios
  • lanzar tareas en PHP, Python o Bash
  • enviar reportes periódicos
  • sincronizar archivos
  • actualizar datos
  • revisar el estado de algún servicio
  • automatizar trabajos rutinarios en servidores o VPS

Si trabajas con Linux, servidores, desarrollo web, paneles administrativos, Raspberry Pi o automatización, aprender cron jobs te da una ventaja enorme. No es exagerado decir que es una de esas habilidades que convierten un sistema “manual” en un sistema mucho más profesional.

En esta guía vamos a ver qué es cron, cómo funciona, cómo se programa una tarea, cómo interpretar su sintaxis y qué errores debes evitar para que tus automatizaciones no fallen silenciosamente.



Qué es un cron job


Un cron job es una tarea programada que Linux ejecuta automáticamente en un horario definido.

La palabra “cron” se refiere al servicio o sistema que se encarga de mirar el reloj y lanzar tareas cuando toca. El “job” es la tarea concreta que tú defines.


Por ejemplo:

  • ejecutar un script todos los días a las 2:00
  • hacer una copia de seguridad cada domingo
  • correr una tarea cada 5 minutos
  • lanzar una limpieza automática cada mes

En otras palabras: cron es el programador y el cron job es el trabajo que le encargas.



Para qué sirve cron en la práctica


Cron es útil porque muchísimas tareas en un servidor o sistema Linux son repetitivas.


Imagina algunos casos reales:


En una web o blog

  • regenerar caché
  • limpiar archivos temporales
  • lanzar tareas de mantenimiento
  • enviar correos programados
  • actualizar contenido o métricas


En un servidor

  • hacer backups
  • limpiar logs antiguos
  • revisar recursos
  • reiniciar procesos cuando toque
  • sincronizar directorios


En una Raspberry Pi

  • ejecutar scripts de sensores
  • comprobar cambios de IP
  • mandar notificaciones
  • correr tareas domóticas


En un sistema interno

  • generar reportes
  • procesar lotes de datos
  • consultar APIs
  • sincronizar estados
  • mover archivos automáticamente

Cuando entiendes esto, cron deja de ser una curiosidad de Linux y se convierte en una herramienta muy seria para automatización.



Cómo funciona cron


Cron funciona como un servicio del sistema que está constantemente revisando si alguna tarea programada debe ejecutarse.

La idea general es:

  1. defines una regla de tiempo
  2. indicas el comando o script a ejecutar
  3. cron espera al momento exacto
  4. cuando llega ese momento, ejecuta la tarea

Todo esto ocurre en segundo plano.

Tú no necesitas abrir la terminal ni recordar lanzar el comando. El sistema lo hace por ti.



Dónde se configuran los cron jobs


Hay varias formas de trabajar con cron, pero una de las más habituales es mediante el crontab del usuario.

Cada usuario puede tener sus propias tareas programadas. Además, existen zonas del sistema donde se pueden definir tareas globales o específicas para mantenimiento del sistema.

Para empezar, lo más práctico es usar tu crontab personal.



Cómo ver los cron jobs actuales


Para ver las tareas programadas del usuario actual:

crontab -l

Esto te muestra el contenido actual del crontab.

Si no hay tareas, normalmente verás que no existe ninguna entrada todavía.



Cómo editar tu crontab


Para añadir o modificar cron jobs:

crontab -e

Esto abre el editor del crontab del usuario actual.

Ahí podrás escribir líneas con la sintaxis de cron. Cada línea suele representar una tarea programada.

La primera vez quizá te pida elegir un editor. Si no tienes preferencia, suele ser cómodo usar nano al empezar.



La sintaxis de cron explicada fácil


La estructura básica de un cron job es esta:

  • minuto
  • hora
  • día del mes
  • mes
  • día de la semana
  • comando a ejecutar

Es decir, defines cuándo y luego qué ejecutar.

Una línea conceptual sería algo como:

“a tal minuto, tal hora, tal día, ejecuta este comando”.



Cómo leer la sintaxis paso a paso


Piensa en esto como una fila de cinco campos de tiempo más el comando final.

Ejemplo conceptual:

30 2 * * * /ruta/al/script.sh

Eso significa:

  • minuto 30
  • hora 2
  • cualquier día del mes
  • cualquier mes
  • cualquier día de la semana

👉 Se ejecuta todos los días a las 2:30.



Qué significa el asterisco *


El asterisco significa “cualquier valor”.

Por ejemplo:

  • en el campo de mes, significa “todos los meses”
  • en el campo de hora, “todas las horas”
  • en el campo de día, “todos los días”

Es uno de los símbolos más importantes de cron.



Ejemplos básicos de cron jobs


Ejecutar un script todos los días a las 3:00

0 3 * * * /home/irak/scripts/backup.sh


Ejecutar algo cada hora

0 * * * * /home/irak/scripts/reporte.sh


Ejecutar una tarea cada 5 minutos

*/5 * * * * /home/irak/scripts/check.sh


Ejecutar algo todos los lunes a las 8:15

15 8 * * 1 /home/irak/scripts/semana.sh


Ejecutar una tarea el día 1 de cada mes a medianoche

0 0 1 * * /home/irak/scripts/mensual.sh

Estos ejemplos ya cubren muchos casos reales.



Significados útiles dentro de la sintaxis


Además del asterisco, cron permite otras formas de programar:

*/5

Significa “cada 5 unidades” del campo correspondiente.


Ejemplo:

  • */5 en minutos = cada 5 minutos

1,2,3

Significa varios valores concretos.


Ejemplo:

  • 1,3,5 en día de la semana = lunes, miércoles y viernes

1-5

Significa un rango.


Ejemplo:

  • 1-5 en día de la semana = de lunes a viernes

Esto da mucha flexibilidad.



Cómo ejecutar scripts con cron


Uno de los usos más comunes es lanzar scripts.

Por ejemplo, un script Bash:

#!/bin/bash
echo "Backup ejecutado" >> /home/irak/logs/backup.log


Guardado como:

/home/irak/scripts/backup.sh


Y luego programado así:

0 2 * * * /home/irak/scripts/backup.sh


Muy importante: el script debe tener permisos de ejecución.

chmod +x /home/irak/scripts/backup.sh

Ejecutar scripts PHP con cron


También puedes usar cron para scripts PHP.

Ejemplo:

*/10 * * * * /usr/bin/php /var/www/html/miapp/tarea.php

Esto ejecuta el script cada 10 minutos.


Muy útil para:

  • correos automáticos
  • colas simples
  • recordatorios
  • sincronizaciones
  • tareas de mantenimiento

Ejecutar scripts Python con cron


Ejemplo:

0 * * * * /usr/bin/python3 /home/irak/scripts/monitor.py

Esto ejecuta el script cada hora.



Por qué conviene usar rutas absolutas


Uno de los errores más comunes con cron es asumir que el entorno será igual al de tu terminal. No lo es.

Por eso conviene usar siempre:

  • rutas absolutas
  • binarios absolutos cuando sea posible
  • directorios claros


Por ejemplo, mejor esto:

/usr/bin/php /var/www/html/script.php


que esto:

php script.php

Porque cron puede no saber dónde está php o desde qué directorio se está ejecutando la tarea.



Redirigir salida a un archivo de log


Otra buena práctica es guardar la salida del cron job en un archivo.


Ejemplo:

0 2 * * * /home/irak/scripts/backup.sh >> /home/irak/logs/backup.log 2>&1


Esto sirve para:

  • ver si la tarea se ejecutó
  • detectar errores
  • revisar salidas de debugging


Explicado simple:

  • >> añade la salida estándar al archivo
  • 2>&1 manda también los errores al mismo archivo

Esto es muy útil porque cron puede fallar silenciosamente si no registras nada.



Ejemplo real: backup diario


Imagina que quieres guardar una copia comprimida de una carpeta todos los días a la 1:30 de la madrugada.


Script:

#!/bin/bash
tar -czf /home/irak/backups/web-$(date +\%F).tar.gz /var/www/html


Cron:

30 1 * * * /home/irak/scripts/backup_web.sh >> /home/irak/logs/backup_web.log 2>&1

Este es un caso muy típico de uso real.



Ejemplo real: vigilar si un servicio responde


Supongamos que tienes un pequeño script que hace una petición HTTP y guarda el resultado.

#!/bin/bash
curl -I https://floopware.com >> /home/irak/logs/check_web.log 2>&1


Y lo ejecutas cada 15 minutos:

*/15 * * * * /home/irak/scripts/check_web.sh

Muy útil para comprobaciones simples.



Ejemplo real: script PHP para tareas internas


Imagina una app en PHP que manda correos pendientes cada 10 minutos.

*/10 * * * * /usr/bin/php /var/www/html/app/cron/send_mail.php >> /var/www/html/app/logs/send_mail.log 2>&1

Esto es muy común en paneles, blogs, tiendas o sistemas de tickets.



Cómo comprobar si cron está funcionando


Hay varias formas:

  • revisar si la tarea generó el resultado esperado
  • revisar el archivo de log que hayas configurado
  • comprobar si el script funciona manualmente
  • revisar logs del sistema relacionados con cron

Muy importante: si un cron job falla, primero comprueba si el comando funciona manualmente desde terminal.


Porque muchas veces el problema no es cron en sí, sino:

  • permisos
  • rutas
  • variables de entorno
  • dependencias


Errores comunes con cron


1. El script no tiene permisos de ejecución

Muy típico en scripts .sh.

2. Usar rutas relativas

Cron no trabaja igual que tu shell interactiva.

3. Asumir que el entorno tiene las mismas variables

A veces PATH u otras variables no están disponibles como esperas.

4. No registrar salida en logs

Entonces no sabes si falló, ni por qué.

5. El comando funciona en terminal, pero no en cron

Suele deberse a entorno, rutas o permisos.

6. Programar mal los campos de tiempo

A veces la tarea sí funciona, pero no en el momento que creías.



Diferencia entre cron del usuario y cron del sistema


El crontab del usuario sirve para programar tareas de ese usuario concreto.

Además existen tareas de sistema que se pueden configurar globalmente. Eso es útil en administración más avanzada, pero para la mayoría de automatizaciones simples o medianas, empezar con crontab -e suele ser suficiente.



Cuándo usar cron y cuándo no


Cron es ideal para:

  • tareas periódicas simples
  • automatización clásica
  • trabajos repetitivos
  • scripts de mantenimiento
  • procesos programados


Pero no siempre es ideal para:

  • tareas muy complejas con reintentos sofisticados
  • dependencias muy elaboradas
  • sistemas modernos de colas o workers
  • orquestación avanzada

Aun así, para muchísimos proyectos reales sigue siendo una herramienta excelente.



Buenas prácticas con cron jobs


  • usa rutas absolutas
  • registra salida en logs
  • prueba el script manualmente antes
  • documenta qué hace cada tarea
  • evita programar cosas críticas sin monitoreo
  • revisa que el usuario tenga permisos adecuados
  • no llenes el crontab de tareas sin orden
  • deja comentarios si el editor o contexto lo permiten


Conclusión:


Cron jobs son una de las herramientas más prácticas de Linux para automatizar tareas repetitivas y dar más autonomía a un sistema.

Aprender cron no solo te ahorra tiempo. También te permite construir entornos más profesionales, ya sea en una Raspberry Pi, un VPS, una web en producción o un sistema interno.

Si entiendes la sintaxis, usas rutas absolutas, registras salida y pruebas bien tus scripts, cron se convierte en un aliado potentísimo para mantenimiento y automatización.