# Configuración y Gestión de Tareas Cron

Source: https://support.kapsulehost.com/es-es/cron-jobs

Un trabajo cron ejecuta un comando según un horario, en segundo plano, independientemente de si alguien visita su sitio o no. Esta guía cubre cómo añadir uno en KPanel, cómo escribir correctamente el horario y el comando para esta plataforma, cómo reemplazar el poco fiable programador integrado de WordPress, y cómo encontrar la salida cuando un trabajo no hace lo que usted esperaba.

## Dónde Vive el Cron en KPanel

El cron pertenece a un sitio, así que se accede a él desde el sitio y no desde el menú principal:

1. Inicie sesión en [KPanel](https://kpanel.kapsulehost.com) y haga clic en **Sitios web** en la barra lateral izquierda.
2. Haga clic en el sitio que desea.
3. En el menú propio del sitio, abra **Configuración** y luego **Cron**.

La dirección directa es `/websites/<site-id>/cron`. Verá una tabla de los trabajos existentes, o un estado vacío si el sitio no tiene ninguno.

![La página de Cron para un sitio en KPanel, con la lista de trabajos programados de ese sitio](https://support.kapsulehost.com/help/screenshots/cron-jobs.13aef775.webp)

## Añadir un Trabajo

Haga clic en **Añadir Trabajo Cron** en la parte superior derecha. El formulario tiene tres campos.

### Horario

Seis botones predefinidos completan la expresión por usted:

| Botón | Expresión |
|---|---|
| Cada minuto | `* * * * *` |
| Cada 5 min | `*/5 * * * *` |
| Cada hora | `0 * * * *` |
| Diariamente a las 2 AM | `0 2 * * *` |
| Cada domingo | `0 2 * * 0` |
| Mensual 1º | `0 2 1 * *` |

O escriba la suya en **Expresión cron**. Los cinco campos, en orden, son minuto, hora, día del mes, mes y día de la semana:

```
minute  hour  day-of-month  month  day-of-week
```

- `0 3 * * *` se ejecuta a las 3:00 am todos los días.
- `*/15 * * * *` se ejecuta cada quince minutos.
- `0 9 * * 1` se ejecuta a las 9:00 am todos los lunes.
- `30 1 1 * *` se ejecuta a la 1:30 am el primer día de cada mes.
- `0 */6 * * *` se ejecuta cada seis horas, en punto.

### Etiqueta

Un nombre que reconocerá más tarde, como `WordPress cron` o `Nightly stock sync`. Es lo que muestra la tabla de trabajos, así que hágalo descriptivo: `job 3` no ayuda a nadie a las 2 am.

### Comando

El comando de shell que se ejecutará. Haga clic en **Save** para crear el trabajo.

> **Warning:** Use rutas completas. El cron se ejecuta con un entorno mínimo y sin ninguno de los perfiles de su shell, así que un `php` simple o un directorio relativo que funciona cuando usted está conectado por SSH fallará aquí de forma silenciosa. Escriba la ruta completa, siempre.

## Cómo Escribir el Comando

Los trabajos se ejecutan como el propio usuario del sistema de su sitio, así que su directorio de inicio es el ancla correcta y `~` se resuelve correctamente. Los archivos de su sitio se encuentran en:

```
~/htdocs/yourdomain.co.nz
```

Puede confirmar la ruta exacta en la pestaña **Configuración** y luego **SFTP** del sitio, que la muestra bajo **Archivos del sitio**.

Comandos típicos:

```
cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now
```

```
cd ~/htdocs/yourdomain.co.nz && /usr/bin/php bin/send-queued-emails.php
```

```
/usr/bin/curl -fsS https://yourdomain.co.nz/api/nightly-report
```

> **Tip:** Pruebe el comando antes de programarlo. Péguelo en la sección **WordPress** y luego **Console** del sitio si es un comando `wp`, o ejecútelo por SSH. Un trabajo que nunca iba a funcionar es mucho más fácil de detectar en el indicador de comandos que a las 3 am en un archivo de registro.

## Reemplazar el Programador Integrado de WordPress

WordPress viene con su propio pseudo-programador, WP-Cron, que solo se activa cuando alguien carga una página. En un sitio con poco tráfico, las publicaciones programadas se publican tarde y los correos se acumulan sin enviarse. En un sitio con mucho tráfico, cada visitante paga el coste de comprobar el horario.

Un trabajo cron real soluciona ambos problemas. KPanel hace todo el cambio por usted:

1. Abra el sitio y luego la pestaña **WordPress**.
2. Abra la sección **WP-Cron**.
3. Haga clic en **Activar cron del sistema**.

Eso añade un horario que ejecuta WP-Cron cada cinco minutos y establece `DISABLE_WP_CRON` para que las cargas de página dejen de activarlo también. **Eliminar cron del sistema** en la misma pantalla revierte ambas partes.

Si prefiere hacerlo manualmente, son dos pasos:

**Desactive la versión activada por visitantes.** Añada esto a `wp-config.php`, encima de la línea `/* That's all, stop editing! */`, usando **Configuración** y luego **Gestor de archivos**:

```php
define( 'DISABLE_WP_CRON', true );
```

**Añada el trabajo real.** En **Configuración** y luego **Cron**:

- Horario: `*/5 * * * *`
- Etiqueta: `WordPress cron`
- Comando: `cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now`

> **Warning:** No se salte la parte de `DISABLE_WP_CRON`. Con ambos ejecutándose, cualquier tarea programada puede activarse dos veces: correos duplicados, procesamiento de pedidos duplicado, cargos duplicados en un complemento de suscripción. Use la acción de un clic en la sección WP-Cron y esto no le podrá pasar.

## WooCommerce y las Colas en Segundo Plano

WooCommerce usa una cola en segundo plano para los cambios de estado de pedidos, renovaciones de suscripciones, correos y actualizaciones de stock. Depende de WP-Cron, así que es exactamente la carga de trabajo que sufre en una tienda con poco tráfico.

Una vez que el horario real está en marcha, la cola se procesa cada cinco minutos. Obsérvela en **WooCommerce**, luego **Status**, luego **Scheduled Actions** en wp-admin.

Una tienda de alto volumen puede pasar a `*/2 * * * *`. Bajar de eso rara vez ayuda: pasa más tiempo iniciando procesos que haciendo trabajo. Consulte [Configuración de WooCommerce](https://support.kapsulehost.com/es-es/wordpress-woocommerce).

## Gestionar los Trabajos Existentes

La tabla de trabajos muestra **Label**, **Schedule**, **Command**, **Última ejecución** y **Status**, con dos acciones en cada fila:

- **Disable** pausa un trabajo sin eliminarlo, y se convierte en **Enable** para reactivarlo. Use esto cuando esté comprobando si un trabajo está causando un problema.
- **Delete** lo elimina de forma permanente. Se le pedirá confirmación, y las ejecuciones programadas se detienen de inmediato.

> **Important:** Eliminar un trabajo cron no se puede deshacer. El horario se elimina del servidor en ese mismo momento. Si solo quiere detenerlo temporalmente, use **Disable**.

## Encontrar la Salida

Cada trabajo que crea KapsuleHost tiene su salida capturada para usted. La salida estándar y los errores se añaden a un archivo de registro en un directorio `cron-logs` dentro del directorio de inicio del usuario del sitio, un archivo por trabajo.

Ese registro es la respuesta a casi cualquier pregunta de "¿se ejecutó mi trabajo?", porque registra lo que imprimió el comando y cualquier error que generó.

Para leerlo, conéctese por SSH y busque en `~/cron-logs/`. SSH usa autenticación por clave, así que añada primero su clave pública desde la pestaña **Configuración** y luego **Claves SSH** del sitio: consulte [Añadir claves SSH](https://support.kapsulehost.com/es-es/adding-ssh-keys).

> **Note:** El Gestor de archivos y las cuentas SFTP están confinados a su directorio de sitio, `~/htdocs/yourdomain.co.nz`, y `cron-logs` se encuentra un nivel por encima. Esto es deliberado: mantiene a un contratista con acceso SFTP fuera de todo excepto del sitio web. Use SSH nativo para acceder a los registros, o redirija la salida a su directorio de sitio como se muestra a continuación.

Si prefiere tener la salida en algún lugar que el Gestor de archivos pueda abrir, rediríjala usted mismo:

```
cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now >> ~/htdocs/yourdomain.co.nz/wp-content/cron.log 2>&1
```

`2>&1` envía los errores al mismo archivo que la salida normal. Sin eso, los errores no van a ningún lugar.

> **Warning:** Cualquier cosa dentro de su directorio de sitio puede potencialmente solicitarse por la web. Coloque un registro redirigido bajo `wp-content` en lugar de en la raíz del sitio, déle un nombre que nadie adivine, y elimínelo una vez que haya terminado de depurar.

## Buenas Prácticas

- **Escalone sus horarios.** Seis trabajos configurados todos a `0 2 * * *` comienzan todos a la vez. Repártalos: `0 2`, `10 2`, `20 2`.
- **No use cada minuto a menos que realmente lo necesite.** `*/5` es suficiente para casi todo, incluidos WordPress y WooCommerce.
- **Mantenga los trabajos cortos.** Un trabajo que tarda más que su intervalo se solapará con la siguiente ejecución.
- **Redirija la salida de cualquier cosa ruidosa**, para que un trabajo con mucha salida no llene su disco.
- **Revise la lista de vez en cuando.** Los trabajos que quedaron de un complemento que eliminó siguen ejecutándose.

## Solución de Problemas

**El trabajo nunca parece ejecutarse.** Compruebe primero la ruta. Abra el archivo de registro. Luego confirme que el estado es **Active** y no **Disabled**. Luego ejecute el mismo comando por SSH y vea qué dice.

**"command not found" en el registro.** Falta la ruta completa. Use `/usr/bin/php`, `/usr/bin/wp`, `/usr/bin/curl` en lugar del nombre simple.

**Permiso denegado.** El trabajo se ejecuta como el usuario del sistema de su sitio. Ese usuario necesita ser propietario, o al menos poder leer, todo lo que el comando toca. Compruebe los permisos en [Usar el Gestor de archivos](https://support.kapsulehost.com/es-es/file-manager).

**Las tareas de WordPress siguen ejecutándose tarde.** Confirme que ambas partes del cambio están en su lugar: el horario existe en **Configuración** y luego **Cron**, y `DISABLE_WP_CRON` está configurado. La sección **WP-Cron** en la pestaña **WordPress** muestra el estado actual de ambos.

**El trabajo se ejecuta pero el sitio va lento mientras lo hace.** Muévalo a una hora más tranquila, o divida el trabajo en lotes más pequeños. El uso de recursos a nivel de sitio es visible en **Rendimiento**: consulte [Mejorar la velocidad del sitio web](https://support.kapsulehost.com/es-es/website-speed).

**Un trabajo dejó de funcionar tras una actualización de complemento.** La ruta del comando puede haber cambiado. Compruebe el registro, luego actualice el comando desde la tabla de trabajos eliminando el trabajo antiguo y añadiendo uno corregido.
