Por qué tu cron job no se ejecuta
Actualizada el 16 de octubre de 2026
Cuando un cron job no se ejecuta, no siempre es evidente dónde buscar el error. Revisa estos puntos en orden: primero si cron intentó ejecutar el job, después por qué falló el comando.
1. ¿Está activo el servicio cron?
systemctl status cron # Debian, Ubuntu
systemctl status crond # RHEL, Fedora, Rocky, AlmaLinux
Si está detenido, inícialo y actívalo al arrancar:
sudo systemctl enable --now cron
Un contenedor de Docker normalmente no tiene cron activo, salvo que su imagen lo inicie. Revisa que el proceso esté con ps aux | grep cron.
2. ¿Cron inició el job?
Cron registra cada comando que inicia. Busca tu job cerca de la hora en que debía ejecutarse:
grep CRON /var/log/syslog # Debian, Ubuntu
sudo journalctl -u cron --since today # Debian, Ubuntu con systemd
sudo journalctl -u crond --since today # RHEL, Fedora
sudo tail -n 50 /var/log/cron # RHEL, CentOS
- El comando está en el log: cron lo ejecutó, y el problema está en el comando. Pasa al punto 4.
- No aparece: revisa el horario y el crontab, en el punto 3. Comprueba también que estés consultando el registro correcto, porque depende de la distribución.
3. ¿El horario es el que crees?
-
Prueba la expresión. Pégala en el probador de cron y revisa sus próximas ejecuciones. Una sorpresa común: cuando están puestos el día del mes y el día de la semana, cron ejecuta el job en cualquiera de los dos.
0 0 13 * 5se ejecuta todos los días 13 y todos los viernes. -
Revisa la zona horaria del servidor. Cron usa la zona horaria del servidor, que puede no ser la tuya:
timedatectl | grep "Time zone". Algunas implementaciones, como cronie, aceptan ademásCRON_TZ=en el crontab. Después de cambiar la zona horaria del servidor, reinicia cron. -
Revisa de quién es el crontab.
crontab -lmuestra el tuyo, ysudo crontab -lel de root. Las líneas de/etc/crontaby de/etc/cron.d/tienen un campo más, con el usuario, antes del comando:0 3 * * * root /usr/local/bin/backup.sh -
Nombra los archivos de
/etc/cron.d/sin puntos. En Debian y Ubuntu, cron ignora un archivo comobackup.cron: llámalobackup. -
Termina el crontab con un salto de línea. Cron puede ignorar una última línea que no lo tenga.
crontab -enormalmente lo agrega, pero un archivo que copiaste puede no tenerlo.
4. ¿Funciona el comando en el entorno de cron?
Cron no lee el perfil de tu shell, así que el comando se ejecuta con un entorno más limitado que el de tu terminal. Estas son las diferencias más comunes:
-
El
PATHes corto, muchas veces solo/usr/bin:/bin. Los comandos de/usr/local/bin, o instalados con nvm, rbenv o pyenv, no se encuentran. Usa rutas absolutas, como/usr/local/bin/node, o define elPATHal principio del crontab:PATH=/usr/local/bin:/usr/bin:/bin -
El shell es
/bin/sh, no bash, así quesource,[[ ]]o los arreglos fallan. Ejecuta el script con bash (/bin/bash /ruta/al/job.sh) o defineSHELL=/bin/bashen el crontab. -
%significa salto de línea en una línea de crontab, así quedate +%Frompe el comando. Escápalo:date +\%F. -
El directorio de trabajo es el home, así que las rutas relativas pueden apuntar al directorio equivocado. Usa rutas absolutas, o
cd /ruta/a/la/app && .... -
No están las variables de
.bashrcni de.profile: claves de API,DATABASE_URL,JAVA_HOME. Defínelas en el crontab o cárgalas en el script.
Para probar el comando casi como lo ejecuta cron:
env -i HOME="$HOME" PATH=/usr/bin:/bin /bin/sh -c 'cd ~ && /ruta/al/job.sh'
5. ¿Puede cron ejecutar el script?
-
Tiene que ser ejecutable, con
chmod +x /ruta/al/job.shy una primera línea como#!/bin/bash. - El usuario del crontab necesita acceso a lo que usa el script: archivos, directorios, sockets.
-
Los saltos de línea de Windows (
\r\n) lo hacen fallar con/bin/bash^M: bad interpreter. Corrígelos consed -i 's/\r$//' /ruta/al/job.sh.
6. Lee el error
Cron manda por email la salida de cada comando al usuario del crontab, o a MAILTO. Si el servidor no tiene configurado el envío de correo, no recibirás esa salida. Guárdala en un archivo:
0 3 * * * /ruta/al/job.sh >> /var/log/job.log 2>&1
Espera la próxima ejecución, o cambia el horario para que se ejecute en un par de minutos, y busca en ese log el mensaje de error.
Entérate antes la próxima vez
Estas revisiones te ayudan a encontrar la causa cuando ya detectaste el problema. Para enterarte antes, configura alertas si el job no empieza, tarda demasiado o termina con un error.