Hospedaje web16 de diciembre de 2025 22 vistas

Cómo configurar las tareas CRON en cPanel

Cómo configurar las tareas CRON en cPanel

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

  1. Conéctate a cPanel
  2. En la sección Avanzado, haz clic en Tareas Cron (Cron Jobs)

Imagen

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:

  1. En la sección Email Cron, introduce tu dirección de correo electrónico
  2. Haz clic en Mettre à jour l'email (Actualizar Email)
    Imagen

💡 Consejo: Para desactivar las notificaciones de una tarea específica, añade >/dev/null 2>&1 al final del comando.


Etapa 3: Agregar una nueva tarea CRON

  1. Desplázate hasta la sección Agregar una nueva tarea Cron
  2. 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-59 o *
  • Hora: 0-23 o *
  • Día: 1-31 o *
  • Mes: 1-12 o *
  • Día de la semana: 0-7 o *

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.cnf seguro.


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

  1. En la sección Tareas Cron actuales, encuentre la tarea a modificar
  2. Haga clic en Modificar (Edit)
  3. Realice sus modificaciones
  4. Haga clic en Modificar la línea (Edit Line)

Eliminar una tarea

  1. En la sección Tareas Cron actuales, encuentre la tarea a eliminar
  2. Haga clic en Eliminar (Delete)
  3. 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
Permisos insuficientes Verifique los permisos del script (755) Error de sintaxis en el script Pruebe el script manualmente Expresión CRON incorrecta Verifique en crontab.guru

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