Cómo crear un cronjob en cPanel
Un cronjob es una tarea programada que el servidor ejecuta automáticamente en el momento que tú especificas: cada hora, cada día a medianoche, cada lunes a las 9 de la mañana, o en cualquier intervalo que necesites. En cPanel se configuran desde una interfaz visual sin necesidad de acceso SSH, y son fundamentales para automatizar backups, enviar correos programados, limpiar cachés o sincronizar datos con servicios externos.
En esta guía te explico cómo crear un cronjob en cPanel desde cero, la sintaxis completa con ejemplos y cómo depurar cuando algo no funciona.
Qué es un cronjob y para qué sirve
El nombre viene de cron, el planificador de tareas de los sistemas Unix/Linux, y job (tarea en inglés). Un cronjob es simplemente una instrucción que le dice al servidor: «ejecuta este comando en este momento y repítelo con esta frecuencia».
Usos habituales en hosting web:
- WordPress: ejecutar el sistema de tareas programadas de WP-Cron (actualizaciones automáticas, publicación programada de posts, limpieza de revisiones)
- Backups: lanzar un script de copia de seguridad diaria de archivos o base de datos
- Correo: enviar newsletters o notificaciones programadas
- Limpieza: borrar archivos temporales, logs antiguos o sesiones caducadas
- Sincronización: actualizar precios desde un proveedor externo en una tienda online
- Monitorización: comprobar el estado de la web y enviar alertas si algo falla
- SEO: regenerar sitemaps automáticamente cuando se publica contenido nuevo
Dónde están los cronjobs en cPanel
En caso de no tener un hosting con cPanel, deberás comprar hosting, acceder a cPanel y buscar la sección Avanzado. Dentro encontrarás Tareas Cron (o Cron Jobs en inglés). Al entrar verás dos secciones:
- Configuración del correo electrónico para Cron: dónde enviar el output de los cronjobs (opcional pero muy útil para depurar)
- Añadir nuevo trabajo de Cron: el formulario para crear nuevos cronjobs
- Trabajos Cron actuales: lista de todos los cronjobs configurados en tu cuenta
La sintaxis del cron: cómo funciona
La sintaxis cron define cuándo se ejecuta la tarea mediante cinco campos separados por espacios, seguidos del comando a ejecutar:
* * * * * comando
│ │ │ │ │
│ │ │ │ └─ 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)
El asterisco * significa «todos los valores posibles». Una coma separa valores múltiples. Un guion define un rango. Una barra / define un intervalo.
Ejemplos de sintaxis cron
| Sintaxis | Significado |
|---|---|
* * * * * | Cada minuto |
0 * * * * | Cada hora (en punto) |
0 0 * * * | Cada día a medianoche |
0 8 * * * | Cada día a las 8:00 |
0 8 * * 1 | Cada lunes a las 8:00 |
0 0 * * 0 | Cada domingo a medianoche |
0 0 1 * * | El día 1 de cada mes a medianoche |
0 0 1 1 * | El 1 de enero a medianoche |
*/5 * * * * | Cada 5 minutos |
*/15 * * * * | Cada 15 minutos |
0 */2 * * * | Cada 2 horas |
0 8,12,18 * * * | A las 8:00, 12:00 y 18:00 cada día |
0 8-18 * * 1-5 | Cada hora de 8:00 a 18:00, de lunes a viernes |
0 0 * * 1,3,5 | Lunes, miércoles y viernes a medianoche |
Si no quieres memorizar la sintaxis, hay herramientas online como crontab.guru donde introduces la expresión y te dice en lenguaje natural cuándo se ejecutará.
Cómo crear un cronjob en cPanel paso a paso
Paso 1: Accede a Tareas Cron
cPanel → sección Avanzado → Tareas Cron
Paso 2: Configura el correo de notificación (recomendado)
En la sección Configuración del correo electrónico para Cron, introduce tu dirección de email. Cuando un cronjob se ejecute y genere algún output (texto, errores, resultados), cPanel te lo enviará por correo. Es la forma más sencilla de saber si el cron está funcionando o si hay errores.
Si el cron se ejecuta correctamente y no genera output, no recibirás email. Si algo falla, recibirás el mensaje de error.
Para evitar recibir un email en cada ejecución de crons que funcionan correctamente, puedes redirigir el output a /dev/null en el comando (lo veremos más adelante).
Paso 3: Define la frecuencia
En el formulario Añadir nuevo trabajo de Cron encontrarás un menú desplegable con frecuencias predefinidas comunes:
- Una vez por hora
- Una vez al día
- Una vez a la semana
- Una vez al mes
Si seleccionas una de estas opciones, cPanel rellena automáticamente los cinco campos de la sintaxis cron. Para frecuencias personalizadas, rellena los campos manualmente.
Paso 4: Escribe el comando
En el campo Comando escribe la instrucción que quieres ejecutar. Este es el campo más importante y donde más errores se cometen. Hay varios tipos de comandos habituales:
Ejecutar un script PHP:
bash
/usr/bin/php /home/tuusuario/public_html/script.php
Ejecutar una URL (mediante wget o curl):
bash
/usr/bin/wget -q -O /dev/null "https://tudominio.com/cron.php"
bash
/usr/bin/curl -s "https://tudominio.com/cron.php" > /dev/null 2>&1
Ejecutar WP-Cron de WordPress:
bash
/usr/bin/php /home/tuusuario/public_html/wp-cron.php
Ejecutar un script de shell:
bash
/bin/bash /home/tuusuario/scripts/backup.sh
Paso 5: Haz clic en «Añadir nuevo trabajo de Cron»
El cronjob aparecerá inmediatamente en la lista de Trabajos Cron actuales y comenzará a ejecutarse según la frecuencia configurada.
Comandos para cronjobs en WordPress
WordPress tiene su propio sistema de tareas programadas llamado WP-Cron. Por defecto, WP-Cron se dispara cada vez que alguien visita la web — lo que significa que en webs con poco tráfico, las tareas programadas pueden no ejecutarse en el momento correcto, y en webs con mucho tráfico puede generar carga innecesaria.
La solución es desactivar WP-Cron y reemplazarlo con un cronjob real del sistema:
Paso 1: Añade esta línea al wp-config.php:
php
define('DISABLE_WP_CRON', true);
Paso 2: Crea un cronjob en cPanel que ejecute WP-Cron directamente. El intervalo recomendado es cada 5 o 15 minutos:
bash
*/5 * * * * /usr/bin/php /home/tuusuario/public_html/wp-cron.php > /dev/null 2>&1
O mediante curl si prefieres no usar el binario PHP directamente:
bash
*/15 * * * * /usr/bin/curl -s "https://tudominio.com/wp-cron.php?doing_wp_cron" > /dev/null 2>&1
El > /dev/null 2>&1 al final redirige tanto el output estándar como los errores a /dev/null, evitando que recibas un email en cada ejecución.
Esta configuración es especialmente importante si usas plugins de publicación programada, newsletters automáticas o cualquier funcionalidad que dependa de la ejecución puntual de tareas. Está directamente relacionada con el rendimiento descrito en el artículo sobre cómo acelerar WordPress.
Ejemplos prácticos de cronjobs para hosting
Backup diario de la base de datos
bash
0 2 * * * /usr/bin/mysqldump -u tuusuario -ptupassword tunombredb > /home/tuusuario/backups/db_$(date +\%Y\%m\%d).sql 2>&1
Este cron se ejecuta cada día a las 2:00 AM y crea un archivo SQL con la fecha en el nombre. Aunque en BlumHost los backups con JetBackup se hacen automáticamente, un backup adicional de la base de datos nunca está de más.
Limpieza de archivos temporales
bash
0 3 * * 0 /bin/find /home/tuusuario/tmp -type f -mtime +7 -delete > /dev/null 2>&1
Cada domingo a las 3:00 AM, borra archivos de la carpeta /tmp con más de 7 días de antigüedad.
Regenerar el sitemap de WordPress
bash
0 6 * * * /usr/bin/curl -s "https://tudominio.com/?sitemap=1" > /dev/null 2>&1
Cada día a las 6:00 AM fuerza la regeneración del sitemap XML, útil si tu plugin de SEO no lo actualiza automáticamente.
Enviar un correo de prueba para verificar que el cron funciona
bash
* * * * * echo "El cron funciona correctamente - $(date)" | mail -s "Test Cron" tuemail@tudominio.com
Útil solo para pruebas — recuerda eliminarlo después.
Script Python en cPanel
Si tienes un script Python en tu hosting:
bash
0 8 * * * /usr/bin/python3 /home/tuusuario/scripts/mi_script.py > /home/tuusuario/logs/python_cron.log 2>&1
Actualizar base de datos de precios en PrestaShop
bash
0 */4 * * * /usr/bin/php /home/tuusuario/public_html/modules/importador/cron.php > /dev/null 2>&1
Cada 4 horas ejecuta el script de importación de precios del módulo.
Rutas importantes que debes conocer
Los comandos del cronjob necesitan rutas absolutas porque el entorno del cron no tiene las mismas variables de entorno que una sesión de terminal normal. Las rutas más habituales en servidores con cPanel:
| Programa | Ruta habitual |
|---|---|
| PHP | /usr/bin/php o /usr/local/bin/php |
| PHP (versión específica) | /usr/bin/php81 o /opt/cpanel/ea-php81/root/usr/bin/php |
| Python 3 | /usr/bin/python3 |
| Wget | /usr/bin/wget |
| Curl | /usr/bin/curl |
| MySQL | /usr/bin/mysql |
| MySQLdump | /usr/bin/mysqldump |
| Bash | /bin/bash |
Cómo encontrar la ruta correcta de PHP en tu servidor:
Desde SSH:
bash
which php
O desde un script PHP temporal con phpinfo() que ya vimos en el artículo sobre cambiar la versión de PHP en cPanel.
Si no tienes acceso SSH, el soporte de tu hosting puede indicarte la ruta correcta.
Cómo depurar un cronjob que no funciona
Es frustrante crear un cron y no saber si se está ejecutando. Estos son los pasos para diagnosticarlo:
Verificación 1: Comprueba que el cron está en la lista
En cPanel → Tareas Cron → Trabajos Cron actuales. Si aparece en la lista, cPanel lo tiene registrado. Si no aparece, no se guardó correctamente.
Verificación 2: Activa las notificaciones por email
Asegúrate de que tienes un email configurado en la sección de notificaciones. Si el cron genera cualquier output o error, lo recibirás por correo.
Verificación 3: Redirige el output a un archivo de log
Modifica el comando para guardar el output en un archivo que puedas revisar:
bash
/usr/bin/php /home/tuusuario/public_html/script.php >> /home/tuusuario/logs/cron.log 2>&1
El >> añade al final del archivo (sin sobrescribir). El 2>&1 captura también los errores. Después de la primera ejecución, abre el archivo cron.log desde el gestor de archivos de cPanel para ver qué ocurrió.
Verificación 4: Prueba el comando manualmente desde SSH
Si tienes acceso SSH, ejecuta el comando del cron directamente en la terminal. Si falla ahí, también fallará en el cron. Los errores que aparezcan te indicarán el problema:
bash
/usr/bin/php /home/tuusuario/public_html/script.php
Verificación 5: Comprueba los permisos del script
El script que ejecuta el cron debe tener permisos de ejecución. Desde SSH:
bash
chmod 755 /home/tuusuario/scripts/backup.sh
Verificación 6: Verifica que la ruta de PHP es correcta
Prueba con la ruta completa de la versión específica que necesitas. Si tu hosting usa EA-PHP:
bash
/opt/cpanel/ea-php81/root/usr/bin/php /home/tuusuario/public_html/script.php
Errores frecuentes y sus soluciones
«No such file or directory»: la ruta del script o del binario PHP es incorrecta. Verifica con which php desde SSH.
«Permission denied»: el script no tiene permisos de ejecución. Usa chmod 755 para darlos.
El cron se ejecuta pero no hace nada: el script tiene un error interno. Revisa el log o activa el output para ver el error.
El cron no se ejecuta nunca: verifica la sintaxis cron con crontab.guru. Un error en la sintaxis hace que el cron se ignore silenciosamente.
Recibo demasiados emails: añade > /dev/null 2>&1 al final del comando para suprimir todo el output.
Gestionar y eliminar cronjobs en cPanel
Editar un cronjob existente: en la lista de trabajos cron actuales, haz clic en Editar junto al cron que quieres modificar. Cambia la frecuencia o el comando y guarda.
Eliminar un cronjob: haz clic en Eliminar junto al cron. Se pide confirmación antes de borrarlo definitivamente.
Ver todos los cronjobs desde SSH: si tienes acceso SSH, puedes ver y editar el crontab directamente:
bash
crontab -l # Listar todos los cronjobs
crontab -e # Editar el crontab en el editor de texto
crontab -r # Eliminar TODOS los cronjobs (con cuidado)
Los cambios hechos desde SSH se reflejan en cPanel y viceversa — son la misma lista.
Cronjobs en VPS vs cronjobs en hosting compartido
En hosting compartido con cPanel, los cronjobs tienen algunas limitaciones:
- La frecuencia mínima suele ser de 1 minuto (aunque algunos proveedores la limitan a 5 o 15 minutos)
- Los scripts tienen límites de tiempo de ejecución del servidor
- No tienes acceso a comandos del sistema que requieren privilegios root
En un VPS tienes control total sobre el crontab del sistema con acceso root, lo que permite:
- Ejecutar comandos con privilegios elevados
- Cronjobs sin límite de tiempo de ejecución
- Usar
systemd timerscomo alternativa más moderna a cron - Instalar herramientas específicas (como
rclonepara sincronización con servicios cloud)
Si tus necesidades de automatización han crecido más allá de lo que permite el hosting compartido, el artículo sobre cuándo necesitas un VPS puede ayudarte a tomar la decisión.
Preguntas frecuentes
¿Cuál es la frecuencia mínima de un cronjob en cPanel?
En la mayoría de configuraciones de cPanel, incluyendo BlumHost, la frecuencia mínima es de 1 minuto (* * * * *). Algunos proveedores la limitan a 5 o 15 minutos por razones de rendimiento del servidor.
¿Los cronjobs consumen recursos de mi cuenta de hosting?
Sí. Cada vez que se ejecuta un cronjob consume CPU y RAM de tu cuenta. Si tienes muchos cronjobs ejecutándose frecuentemente con scripts pesados, puede impactar en el rendimiento de tu web. Planifica bien las frecuencias y evita ejecutar scripts pesados cada minuto.
¿Puedo ejecutar cronjobs con una versión específica de PHP?
Sí. Usa la ruta del binario de la versión que necesitas. Por ejemplo, para PHP 8.1: /opt/cpanel/ea-php81/root/usr/bin/php. Consulta con el soporte de tu hosting la ruta exacta disponible.
¿Los cronjobs se ejecutan si la web está caída?
Los cronjobs son independientes del servidor web. Si tu web da error 500 o está en mantenimiento, los cronjobs del servidor siguen ejecutándose. Sí pueden fallar si el script que ejecutan depende de que la web funcione (como los cronjobs que hacen peticiones HTTP a tu propio dominio).
¿Cómo sé en qué zona horaria se ejecutan los cronjobs?
En cPanel, los cronjobs usan la zona horaria del servidor. Puedes verla en cPanel → información general del servidor, o ejecutando date desde SSH. En BlumHost los servidores usan hora española (Europe/Madrid).
¿Puedo usar cronjobs para hacer backups si ya tengo JetBackup?
JetBackup en BlumHost hace backups automáticos diarios de toda la cuenta. Los cronjobs de backup son útiles para necesidades específicas adicionales: backups más frecuentes de la base de datos, copias a destinos externos (S3, Google Drive) o backups de datos que JetBackup no cubre por su naturaleza.
