Cómo configurar las tareas CRON en cPanel
Tiempo estimado: 10 minutos
Dificultad: Intermedia ⭐⭐
Requisitos previos: Acceso a cPanel, conocimientos básicos de línea de comandos
📋 Introducción
Las tareas CRON (o Cron Jobs) permiten automatizar la ejecución de scripts y comandos en intervalos regulares en tu servidor. Es una herramienta poderosa para automatizar tareas repetitivas sin intervención manual.
Ejemplos de uso común
| Tarea | Frecuencia típica |
|---|---|
| 🔄 Copias de seguridad automáticas | Diario o semanal |
| 📧 Envío de newsletters | Semanal |
| 🗑️ Limpieza de archivos temporales | Diario |
| 📊 Generación de informes | Diario o mensual |
| 🔔 WordPress WP-Cron | Cada 15-30 minutos |
| 💾 Sincronización de datos | Cada hora |
| 📬 Verificación de correos electrónicos | Cada 5 minutos |
| 🛒 Actualización de stocks (e-commerce) | Cada hora |
🔢 Comprendiendo la Sintaxis CRON
Structura de una expresión CRON
Una tarea CRON está definida por 5 campos temporales + la comando a ejecutar:
* * * * * comando a ejecutar
│ │ │ │ │
│ │ │ │ └─── Día de la semana (0-7) (0 y 7 = Domingo)
│ │ │ └──────── Mes (1-12)
│ │ └───────────── Día del mes (1-31)
│ └────────────────── Hora (0-23)
└─────────────────────── Minuto (0-59)
Valores posibles
| Campo | Valores | Caracteres especiales |
|---|---|---|
| Minuto | 0-59 | * , - / |
| Hora | 0-23 | * , - / |
| Día del mes | 1-31 | * , - / |
| Mes | 1-12 o ene-dic | * , - / |
| Día de la semana | 0-7 o dom-sáb | * , - / |
Caracteres especiales
| Carácter | Significado | Ejemplo |
|---|---|---|
* |
Todos los valores | * * * * * = cada minuto |
, |
Lista de valores | 1,15,30 = en los minutos 1, 15 y 30 |
- |
Rango de valores | 1-5 = del 1 al 5 |
/ |
Intervalo | */15 = cada 15 unidades |
Ejemplos de expresiones CRON
| Expresión | Significado |
|---|---|
* * * * * |
Cada minuto |
*/5 * * * * |
Cada 5 minutos |
*/15 * * * * |
Cada 15 minutos |
0 * * * * |
Cada hora (en el minuto 0) |
0 */2 * * * |
Cada 2 horas |
0 0 * * * |
Cada día a medianoche |
0 2 * * * |
Cada día a las 2 de la madrugada |
30 4 * * * |
Cada día a las 4:30 |
0 0 * * 0 |
Cada domingo a medianoche |
0 0 * * 1-5 |
De lunes a viernes a medianoche |
0 0 1 * * |
El 1 de cada mes a medianoche |
0 0 1 1 * |
El 1 de enero a medianoche |
0 8,12,18 * * * |
A las 8, 12 y 18 horas cada día |
0 9-17 * * 1-5 |
De 9 a 17 horas, de lunes a viernes |
⚙️ Crear una Tarea CRON en cPanel
Etapa 1: Acceder a las tareas CRON
- Conéctate a cPanel
- En la sección Avanzado, haz clic en Tareas Cron (Cron Jobs)

Etapa 2: Configurar las notificaciones por correo electrónico
Antes de crear tareas, configura la dirección de correo electrónico para recibir los resultados:
- En la sección Email Cron, introduce tu dirección de correo electrónico
- Haz clic en Mettre à jour l'email (Actualizar Email)

💡 Consejo: Para desactivar las notificaciones de una tarea específica, añade
>/dev/null 2>&1al final del comando.
Etapa 3: Agregar una nueva tarea CRON
- Desplázate hasta la sección Agregar una nueva tarea Cron
- Parámetros comunes: Utiliza el menú desplegable para seleccionar un intervalo predefinido
| Opción | Expresión generada |
|---|---|
| Una vez por minuto | * * * * * |
| Una vez cada 5 minutos | */5 * * * * |
| Dos veces por hora | 0,30 * * * * |
| Una vez por hora | 0 * * * * |
| Dos veces al día | 0 0,12 * * * |
| Una vez al día | 0 0 * * * |
| Una vez por semana | 0 0 * * 0 |
| Una vez al mes | 0 0 1 * * |
Etapa 4: Personalizar el intervalo (opcional)
Si las opciones predefinidas no son adecuadas, completa manualmente los campos:
- Minuto:
0-59o* - Hora:
0-23o* - Día:
1-31o* - Mes:
1-12o* - Día de la semana:
0-7o*
Etapa 5: Ingresar el comando
En el campo Comando, introduce el comando completo con la ruta absoluta.
Ejemplos de comandos:
# Ejecutar un script PHP
/usr/local/bin/php /home/username/public_html/script.php
# Ejecutar con wget (llamar a una URL)
/usr/bin/wget -q -O /dev/null https://monsite.com/cron.php
# Ejecutar con curl
/usr/bin/curl -s https://monsite.com/cron.php > /dev/null 2>&1
# Eliminar archivos de más de 7 días
/usr/bin/find /home/username/public_html/tmp -type f -mtime +7 -delete
Etapa 6: Guardar
Haz clic en Agregar una nueva tarea Cron (Add New Cron Job)
La tarea aparecerá en la lista Tareas Cron actuales (Current Cron Jobs).
📝 Tareas CRON Comunes
Ejecutar un script PHP
/usr/local/bin/php /home/username/public_html/mon-script.php
💡 La ruta de PHP puede variar. Rutas comunes:
/usr/local/bin/php/usr/bin/php/usr/local/bin/ea-php81(para una versión específica)
Llamar a una URL con wget
/usr/bin/wget -q -O /dev/null https://monsite.com/cron.php
| Opción | Significado |
|---|---|
-q | Modo silencioso (quiet) |
-O /dev/null | No guardar la salida |
Llamar a una URL con curl
/usr/bin/curl -s https://monsite.com/cron.php > /dev/null 2>&1
| Opción | Significado |
|---|---|
-s | Modo silencioso |
> /dev/null 2>&1 | Redirigir toda la salida a nulo |
Eliminar archivos temporales
# Eliminar archivos .tmp de más de 24h
/usr/bin/find /home/username/public_html/cache -name "*.tmp" -mtime +1 -delete
# Eliminar archivos de más de 7 días en una carpeta
/usr/bin/find /home/username/logs -type f -mtime +7 -delete
Respaldar una base de datos
/usr/bin/mysqldump -u db_user -p'mot_de_passe' db_name > /home/username/backups/backup_$(date +\%Y\%m\%d).sql
⚠️ Seguridad: Evite almacenar contraseñas en texto plano. Utilice un archivo
.my.cnfseguro.
Comprimir archivos
/usr/bin/tar -czf /home/username/backups/site_$(date +\%Y\%m\%d).tar.gz /home/username/public_html
🔵 Tareas CRON para WordPress
Problema con WP-Cron
WordPress utiliza un sistema de "pseudo-cron" llamado WP-Cron que se ejecuta en cada carga de página. En sitios con poco tráfico, las tareas programadas pueden retrasarse.
Solución: Desactivar WP-Cron y utilizar un sistema CRON real.
Paso 1: Desactivar WP-Cron
Edite el archivo wp-config.php y agregue esta línea antes de /* That's all, stop editing! */:
define('DISABLE_WP_CRON', true);
Paso 2: Crear una tarea CRON del sistema
Opción A: Con wget
/usr/bin/wget -q -O /dev/null https://monsite.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
Opción B: Con curl
/usr/bin/curl -s https://monsite.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
Opción C: Con PHP directamente
/usr/local/bin/php /home/username/public_html/wp-cron.php > /dev/null 2>&1
Frecuencia recomendada para WordPress
| Tipo de sitio | Frecuencia |
|---|---|
| Blog personal | Cada hora (0 * * * *) |
| Sitio de presentación | Cada 30 minutos (*/30 * * * *) |
| E-commerce WooCommerce | Cada 15 minutos (*/15 * * * *) |
| Sitio de alto tráfico | Cada 5 minutos (*/5 * * * *) |
Configuración completa de WordPress
| Intervalo | Comando |
|---|---|
*/15 * * * * | /usr/bin/wget -q -O /dev/null https://monsite.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1 |
📋 Ejemplos Prácticos
Ejemplo 1: Respaldo diario a las 3 de la madrugada
| Campo | Valor |
|---|---|
| Minuto | 0 |
| Hora | 3 |
| Día | * |
| Mes | * |
| Día de la semana | * |
| Comando | /usr/local/bin/php /home/username/public_html/backup.php > /dev/null 2>&1 |
Expresión completa: 0 3 * * *
Ejemplo 2: Limpieza de caché cada 6 horas
| Campo | Valor |
|---|---|
| Minuto | 0 |
| Hora | */6 |
| Día | * |
| Mes | * |
| Día de la semana | * |
| Comando | /usr/local/bin/php /home/username/public_html/clear_cache.php |
Expresión completa: 0 */6 * * *
Ejemplo 3: Informe semanal los lunes a las 9 de la mañana
| Campo | Valor |
|---|---|
| Minuto | 0 |
| Hora | 9 |
| Día | * |
| Mes | * |
| Día de la semana | 1 |
| Comando | /usr/local/bin/php /home/username/public_html/weekly_report.php |
Expresión completa: 0 9 * * 1
Ejemplo 4: Actualización de precios cada hora (e-commerce)
| Campo | Valor |
|---|---|
| Minuto | 0 |
| Hora | * |
| Día | * |
| Mes | * |
| Día de la semana | * |
| Comando | /usr/bin/curl -s https://monsite.com/update-prices.php > /dev/null 2>&1 |
Expresión completa: 0 * * * *
Ejemplo 5: Eliminación de sesiones expiradas diariamente
| Campo | Valor |
|---|---|
| Minuto | 30 |
| Hora | 2 |
| Día | * |
| Mes | * |
| Día de la semana | * |
| Comando | /usr/bin/find /home/username/tmp/sessions -type f -mtime +1 -delete |
Expresión completa: 30 2 * * *
✏️ Modificar o Eliminar una Tarea CRON
Modificar una tarea
- En la sección Tareas Cron actuales, encuentre la tarea a modificar
- Haga clic en Modificar (Edit)
- Realice sus modificaciones
- Haga clic en Modificar la línea (Edit Line)
Eliminar una tarea
- En la sección Tareas Cron actuales, encuentre la tarea a eliminar
- Haga clic en Eliminar (Delete)
- Confirme la eliminación
🔧 Solución de Problemas
La tarea CRON no se ejecuta
| ❌ Posible causa | ✅ Solución |
|---|---|
| Ruta incorrecta a PHP | Verifique con which php en SSH |
| Ruta incorrecta al script | Utilice la ruta absoluta completa |
Encontrar la ruta de PHP
Conéctese por SSH y ejecute:
which php
Resultado típico: /usr/local/bin/php
Para una versión específica:
which ea-php81
Probar un comando manualmente
Antes de crear la tarea CRON, pruebe el comando por SSH:
/usr/local/bin/php /home/username/public_html/mon-script.php
Si el script funciona manualmente, debería funcionar en CRON.
Recibir notificaciones de error
Para depurar, elimine temporalmente > /dev/null 2>&1 del comando.
Entonces recibirá los errores por correo electrónico.
Errores comunes
"No such file or directory"
/bin/sh: /home/username/public_html/script.php: No such file or directory
Solución: Verifique que la ruta sea correcta y que el archivo exista.
"Permission denied"
/bin/sh: /home/username/public_html/script.php: Permission denied
Solución: Haga que el script sea ejecutable:
chmod 755 /home/username/public_html/script.php
O use el intérprete PHP explícitamente:
/usr/local/bin/php /home/username/public_html/script.php
"Command not found"
/bin/sh: php: command not found
Solución: Utilice la ruta completa hacia PHP (/usr/local/bin/php).
Verificar los logs CRON
Los logs CRON suelen estar en /var/log/cron (se requiere acceso de root).
En hosting compartido, use notificaciones por correo electrónico para depurar.
⚠️ Buenas Prácticas
Frecuencia de las tareas
| ⚠️ Evitar | ✅ Recomendado |
|---|---|
* * * * * (cada minuto) sin motivo | Mínimo 5-15 minutos entre las ejecuciones |
| Varias tareas pesadas a la misma hora | Escalonar las tareas en el tiempo |
| Tareas inútiles | Eliminar las tareas obsoletas |
⚠️ Hosting compartido: La mayoría de los proveedores limitan los CRON a un mínimo de 5-15 minutos.
Seguridad
| Práctica | Recomendación |
|---|---|
| Contraseñas | No incluirlas en claro en los comandos |
| Scripts sensibles | Colocar fuera de public_html |
| Logs | Vigilar regularmente las ejecuciones |
| Permisos | Limitar los permisos de los scripts |
Optimización
# Buena práctica: usar nice para limitar la prioridad
nice -n 15 /usr/local/bin/php /home/username/public_html/script.php
# Buena práctica: redirigir la salida para evitar correos electrónicos
/usr/local/bin/php /home/username/script.php > /dev/null 2>&1
# Buena práctica: registrar en un archivo para depuración
/usr/local/bin/php /home/username/script.php >> /home/username/logs/cron.log 2>&1
📊 Herramientas Útiles
Generadores de expresiones CRON
| Herramienta | URL |
|---|---|
| Crontab Guru | crontab.guru |
| Cron Maker | cronmaker.com |
| Crontab Generator | crontab-generator.org |
Probar una expresión CRON
En crontab.guru, ingrese su expresión para ver cuándo se ejecutará:
*/15 * * * *
Resultado: "Cada 15 minutos" Próximas ejecuciones: 00:00, 00:15, 00:30, 00:45, 01:00...
📝 Resumen
CONFIGURAR UNA TAREA CRON:
1. cPanel → Avanzado → Tareas Cron
2. Configurar el correo de notificación (opcional)
3. Seleccionar el intervalo (menú desplegable o personalizado)
4. Ingresar el comando con la ruta absoluta
5. Hacer clic en "Agregar una nueva tarea Cron"
SINTAXIS CRON:
┌─────────── Minuto (0-59)
│ ┌───────── Hora (0-23)
│ │ ┌─────── Día del mes (1-31)
│ │ │ ┌───── Mes (1-12)
│ │ │ │ ┌─── Día de la semana (0-7)
│ │ │ │ │
* * * * * comando
INTERVALOS COMUNES:
├── */5 * * * * → Cada 5 minutos
├── 0 * * * * → Cada hora
├── 0 0 * * * → Todos los días a medianoche
├── 0 0 * * 0 → Todos los domingos a medianoche
└── 0 0 1 * * → El 1er día de cada mes
TIPOS DE COMANDOS:
├── PHP: /usr/local/bin/php /ruta/script.php
├── wget: /usr/bin/wget -q -O /dev/null https://url
├── curl: /usr/bin/curl -s https://url > /dev/null 2>&1
└── find: /usr/bin/find /ruta -mtime +7 -delete
WORDPRESS WP-CRON:
1. Agregar en wp-config.php: define('DISABLE_WP_CRON', true);
2. Crear CRON: */15 * * * * wget -q -O /dev/null https://site.com/wp-cron.php?doing_wp_cron
DESACTIVAR NOTIFICACIONES:
Agregar al final del comando: > /dev/null 2>&1
