El comando cron y crontab en Linux: programar tareas periódicas

Introducción

En los sistemas operativos tipo Unix, automatizar tareas repetitivas es esencial para ahorrar tiempo y reducir errores humanos. El demonio cron permite ejecutar comandos o scripts en momentos predefinidos, mientras que crontab es la interfaz que cada usuario utiliza para definir su propia tabla de programaciones. En este artículo veremos cómo funciona cron, la sintaxis de crontab y varios ejemplos prácticos que puedes aplicar inmediatamente en tu servidor o estación de trabajo.

¿Qué es cron?

Cron es un proceso en segundo plano que se ejecuta continuamente y revisa, cada minuto, si hay alguna entrada programada que coincida con la hora actual. Cuando encuentra una coincidencia, lanza el comando asociado con los privilegios del usuario que lo programó. Su diseño es simple pero potente: no requiere de interfaces gráficas y funciona en prácticamente cualquier distribución Linux.

¿Cómo funciona crontab?

Cada usuario dispone de su propio archivo crontab (tabla de cron) que se almacena en /var/spool/cron/crontabs o, en sistemas más modernos, se gestiona mediante el comando crontab -e. Al editar este archivo, se define una lista de líneas donde cada línea representa una tarea y consta de cinco campos de tiempo seguidos del comando a ejecutar.

Sintaxis de crontab

La estructura básica es:

* * * * * comando_a_ejecutar
- - - - -
| | | | |
| | | | +--- día de la semana (0‑7, donde 0 y 7 son domingo)
| | | +----- mes (1‑12)
| | +------- día del mes (1‑31)
| +--------- hora (0‑23)
+----------- minuto (0‑59)

Los asteriscos indican «todos los valores». Además, se pueden usar rangos, listas y pasos. Por ejemplo, */15 en el campo de minutos significa cada 15 minutos; 10-15 indica un rango; y 1,3,5 especifica una lista de valores.

Ejemplos prácticos

  • Respaldar una base de datos cada día a las 02:30: 30 2 * * * /usr/bin/mysqldump -u root -pMiClave mi_base > /backups/db_$(date +\%F).sql
  • Limpiar archivos temporales más antiguos de 7 días: 0 3 * * * find /tmp -type f -mtime +7 -delete
  • Reiniciar un servicio web cada lunes a las 04:00: 0 4 * * 1 systemctl restart apache2
  • Enviar un reporte de uso de disco cada viernes a las 09:15: 15 9 * * 5 df -h | mail -s 'Uso de disco' admin@ejemplo.com
  • Ejecutar un script personalizado cada 10 minutos: */10 * * * * /home/usuario/scripts/revision.sh
  • Actualizar el índice de paquetes y aplicar actualizaciones de seguridad cada domingo a las 05:00: 0 5 * * 0 apt-get update && apt-get upgrade -y -o Dpkg::Options::='--force-confold' >> /var/log/auto-update.log 2>&1
  • Rotar logs de una aplicación personal cada hora: 0 * * * * /usr/sbin/logrotate /etc/myapp/logrotate.conf

Buenas prácticas y depuración

Para evitar sorpresas, sigue estos consejos:

  • Usa rutas absolutas en los comandos; el entorno de cron es mínimo y puede no tener las mismas variables de PATH que tu shell interactivo.
  • Redirige la salida estándar y de error a un archivo de log para revisar qué ocurrió: comando >> /var/log/micron.log 2>&1
  • Prueba primero el comando en la terminal antes de programarlo; verifica que funciona sin intervención humana.
  • Si una tarea no se ejecuta, revisa el log del demonio cron (usualmente /var/log/syslog o /var/log/cron) y el correo del usuario, ya que cron envía la salida por correo si no se redirige.
  • Mantén las entradas de crontab organizadas y comenta cada línea con su propósito usando el símbolo #.
  • Evita colocar tareas que consuman muchos recursos en períodos de alta carga; usa nice o ionice para ajustar la prioridad si es necesario.
  • Revisa periódicamente las crontabs de todos los usuarios con crontab -l -u usuario para detectar entradas obsoletas o peligrosas.

Conclusión

Cron y crontab son herramientas fundamentales para cualquier administrador de sistemas Linux. Dominar su sintaxis y aplicar buenas prácticas te permitirá automatizar copias de seguridad, limpiezas, reportes y cualquier tarea repetitiva, liberando tiempo para actividades de mayor valor. Empieza a experimentar con pequeños programas y, poco a poco, construye un entorno más eficiente y fiable.