Inicio » ¿Por qué no se ejecuta mi tarea de Cron? Diagnóstico paso a paso
Sistemas y Servidores

¿Por qué no se ejecuta mi tarea de Cron? Diagnóstico paso a paso

✨ Respuesta Rápida

El fallo más recurrente con las tareas automatizadas de Cron es que el script o comando funciona perfectamente cuando lo ejecutas de forma manual en tu terminal, pero falla silenciosamente cuando es invocado por el demonio del sistema (cron). Esto ocurre por diferencias críticas entre la sesión de tu usuario y el entorno aislado de Cron.

El Diagnóstico Rápido

Causa
Servicio de cron deshabilitado o detenido
Solución
Iniciar el demonio de cron: systemctl enable --now cron (o crond)
Causa
Falta de salto de línea al final del archivo crontab o rutas relativas
Solución
Usar siempre rutas absolutas para comandos y ejecutables en la sintaxis de cron

El fallo más recurrente con las tareas automatizadas de Cron es que el script o comando funciona perfectamente cuando lo ejecutas de forma manual en tu terminal, pero falla silenciosamente cuando es invocado por el demonio del sistema (cron). Esto ocurre por diferencias críticas entre la sesión de tu usuario y el entorno aislado de Cron.

La Solución Paso a Paso

  1. 1

    Paso 1: Forzar el uso de rutas absolutas en comandos y scripts

    Cron no carga las variables de entorno de tu archivo .bashrc ni hereda la variable PATH de tu sesión interactiva. Por lo tanto, no sabrá dónde están binarios como python3, node o git a menos que utilices rutas completas:

    BASH
    # INCORRECTO:
    * * * * * python3 /home/usuario/script.py
    
    # CORRECTO (Usa "which python3" para verificar la ruta en tu sistema):
    * * * * * /usr/bin/python3 /home/usuario/script.py
    
  2. 2

    Paso 2: Redirigir errores y logs de ejecución a un archivo físico

    Dado que las tareas en segundo plano no tienen una terminal física para mostrar mensajes de error, debes forzar al sistema a escribirlos en un archivo log para poder auditar el motivo exacto del fallo:

    BASH
    # Redirigir la salida estándar (1) y el canal de errores (2) a un log
    0 5 * * * /usr/bin/bash /home/usuario/backup.sh >> /home/usuario/backup.log 2>&1
    
  3. 3

    Paso 3: Verificar que el demonio de Cron esté activo

    Asegúrate de que el servicio encargado de coordinar la cola de tareas programadas esté corriendo en tu servidor:

    BASH
    sudo systemctl status cron   # En Debian/Ubuntu
    sudo systemctl status crond  # En Arch/RHEL/CentOS
    

Consejo de Prevención

Prácticas de seguridad recomendadas:

  • Siempre declara la variable PATH y el shell preferido explícitamente en la parte superior de tu archivo de programación crontab (crontab -e) para garantizar que la ejecución no dependa de variables externas heredadas:
    PLAINTEXT
    SHELL=/bin/bash
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin