Sitios web

Configuración y Gestión de Trabajos Cron

A cron job runs a command on a schedule, in the background, whether or not anyone is visiting your site. This guide covers adding one in KPanel, writing the schedule and the command correctly for…

Configuración y Gestión de Tareas Cron

Una tarea cron ejecuta un comando en una programación, en segundo plano, independientemente de si alguien está visitando tu sitio. Esta guía cubre cómo agregar una en KPanel, escribir correctamente la programación y el comando para esta plataforma, reemplazar el programador integrado no confiable de WordPress y encontrar la salida cuando una tarea no hace lo esperado.

Dónde se encuentra Cron en KPanel

Cron pertenece a un sitio, así que lo accedes desde el sitio en lugar de desde el menú principal:

  1. Inicia sesión en KPanel y haz clic en Websites en la barra lateral izquierda.
  2. Haz clic en el sitio que deseas.
  3. En el menú propio del sitio, abre Advanced, luego Cron.

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

Cron jobs on a site in KPanel

Agregar una Tarea

Haz clic en Add Cron Job en la esquina superior derecha. El formulario tiene tres campos.

Schedule

Seis botones preestablecidos rellenan la expresión automáticamente:

BotónExpresión
Every minute* * * * *
Every 5 min*/5 * * * *
Every hour0 * * * *
Daily 2AM0 2 * * *
Weekly Sunday0 2 * * 0
Monthly 1st0 2 1 * *

O escribe la tuya en Cron expression. Los cinco campos, en orden, son minuto, hora, día del mes, mes, 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 cada lunes.
  • 30 1 1 * * se ejecuta a la 1:30 am del primero de cada mes.
  • 0 */6 * * * se ejecuta cada seis horas, en punto.

Label

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

Command

El comando de shell a ejecutar. Haz clic en Save para crear la tarea.

Usa rutas completas. Cron se ejecuta con un entorno mínimo y sin tu perfil de shell, así que un php desnudo o un directorio relativo que funciona cuando has iniciado sesión por SSH fallará silenciosamente aquí. Escribe la ruta completa, siempre.

Escribir el Comando

Las tareas se ejecutan como el usuario del sistema de tu sitio, así que el directorio de inicio es el anclaje correcto y ~ se resuelve correctamente. Los archivos de tu sitio se encuentran en:

~/htdocs/yourdomain.co.nz

Puedes confirmar la ruta exacta en la pestaña Files, luego SFTP, que la imprime bajo Site files.

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

Prueba el comando antes de programarlo. Pégalo en la sección WordPress, luego Console si es un comando wp, o ejecútalo por SSH. Una tarea que nunca iba a funcionar es mucho más fácil de detectar en el símbolo del sistema que a las 3 am en un archivo de registro.

Reemplazar el Programador Integrado de WordPress

WordPress incluye su propio seudoprogramador, WP-Cron, que solo se activa cuando alguien carga una página. En un sitio tranquilo, las publicaciones programadas se publican tarde y los correos electrónicos se quedan sin enviar en la cola. En un sitio concurrido, cada visitante paga el costo de verificar el programador.

Una tarea cron real soluciona ambos problemas. KPanel hace todo el cambio por ti:

  1. Abre el sitio, luego la pestaña WordPress.
  2. Abre la sección WP-Cron.
  3. Haz clic en Enable system cron.

Esto agrega una programación que ejecuta WP-Cron cada cinco minutos y establece DISABLE_WP_CRON para que las cargas de página dejen de activarlo también. Remove system cron en la misma pantalla revierte ambas partes.

Si prefieres hacerlo manualmente, son dos pasos:

Desactiva la versión activada por visitantes. Agrega esto a wp-config.php, encima de la línea /* That's all, stop editing! */, usando Files, luego File Manager:

define( 'DISABLE_WP_CRON', true );

Agrega la tarea real. En Advanced, luego Cron:

  • Schedule: */5 * * * *
  • Label: WordPress cron
  • Command: cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now

No omitas la mitad DISABLE_WP_CRON. Con ambas ejecutándose, cada tarea programada puede activarse dos veces: correos electrónicos duplicados, procesamiento de pedidos duplicado, cargos duplicados en un plugin de suscripción. Usa la acción de un clic en la sección WP-Cron y esto no puede sucederte.

WooCommerce y Colas de Fondo

WooCommerce usa una cola de fondo para cambios de estado de pedidos, renovaciones de suscripciones, correos electrónicos y actualizaciones de stock. Se basa en WP-Cron, así que es exactamente la carga de trabajo que sufre en una tienda tranquila.

Una vez que la programación real está en su lugar, la cola se procesa cada cinco minutos. Vigílala en WooCommerce, luego Status, luego Scheduled Actions en wp-admin.

Una tienda de alto volumen puede cambiar a */2 * * * *. Ir por debajo de eso raramente ayuda: gastas más tiempo iniciando procesos que haciendo trabajo. Ver Setting Up WooCommerce.

Gestionar Tareas Existentes

La tabla de trabajos muestra Label, Schedule, Command, Last run y Status, con dos acciones en cada fila:

  • Disable pausa una tarea sin eliminarla, y se convierte en Enable para traerla de vuelta. Úsalo cuando estés probando si una tarea está causando un problema.
  • Delete la elimina permanentemente. Se te pide que confirmes, y las ejecuciones programadas se detienen inmediatamente.

Eliminar una tarea cron no se puede deshacer. La programación se elimina del servidor en ese momento. Si solo intentas detenerla temporalmente, usa Disable.

Encontrar la Salida

Cada tarea que Kapsule crea tiene su salida capturada para ti. La salida estándar y los errores se agregan a un archivo de registro en un directorio cron-logs en el directorio de inicio del usuario de tu sitio, un archivo por tarea.

Ese registro es la respuesta a casi todas las preguntas "¿se ejecutó mi tarea?", porque registra lo que el comando imprimió y cualquier error que haya generado.

Para leerlo, conéctate por SSH y busca en ~/cron-logs/. SSH usa autenticación por clave, así que agrega tu clave pública primero desde la pestaña Files, luego SSH Keys del sitio: ver Adding SSH Keys.

El File Manager y las cuentas SFTP están confinados a tu directorio de sitio, ~/htdocs/yourdomain.co.nz, y cron-logs se encuentra un nivel arriba. Esto es intencional: mantiene a un contratista con acceso SFTP fuera de todo excepto del sitio web. Usa SSH nativo para llegar a los registros, o redirige la salida a tu directorio del sitio como se muestra a continuación.

Si prefieres tener la salida en algún lugar que el File Manager pueda abrir, redirige tú 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 errores al mismo archivo que la salida normal. Sin él, los errores van a ninguna parte.

Cualquier cosa dentro de tu directorio de sitio puede ser potencialmente solicitada a través de la web. Pon un registro redirigido bajo wp-content en lugar de en la raíz del sitio, dale un nombre que nadie adivinaría, y elimínalo una vez que hayas terminado de depurar.

Buenas Prácticas

  • Escaloniza tus programaciones. Seis tareas todas configuradas para 0 2 * * * todas comienzan a la vez. Espárcelas: 0 2, 10 2, 20 2.
  • No uses cada minuto a menos que realmente lo necesites. */5 es suficiente para casi todo, incluyendo WordPress y WooCommerce.
  • Mantén las tareas cortas. Una tarea que tarda más que su intervalo se sobrepondrá con la siguiente ejecución.
  • Redirige la salida para cualquier cosa ruidosa, para que una tarea ruidosa no llene tu disco.
  • Revisa la lista ocasionalmente. Las tareas dejadas atrás de un plugin que eliminaste siguen ejecutándose.

Resolución de Problemas

La tarea nunca parece ejecutarse. Verifica la ruta primero. Abre el archivo de registro. Luego confirma que el estado es Active y no Disabled. Luego ejecuta el mismo comando por SSH y ve qué dice.

"command not found" en el registro. Una ruta completa faltante. Usa /usr/bin/php, /usr/bin/wp, /usr/bin/curl en lugar del nombre desnudo.

Permission denied. La tarea se ejecuta como el usuario del sistema de tu sitio. Ese usuario necesita ser propietario, o al menos poder leer, todo lo que el comando toca. Verifica los permisos en Using the File Manager.

Las tareas de WordPress aún se ejecutan tarde. Confirma que ambas mitades del cambio están en su lugar: la programación existe en Advanced, luego Cron, y DISABLE_WP_CRON está establecido. La sección WP-Cron en la pestaña WordPress muestra el estado actual de ambos.

El sitio es lento mientras la tarea se ejecuta. Muévela a una hora más tranquila, o divide el trabajo en lotes más pequeños. El uso de recursos a nivel de sitio es visible bajo Performance: ver Improving Website Speed.

Una tarea dejó de funcionar después de una actualización de plugin. La ruta del comando puede haber cambiado. Verifica el registro, luego actualiza el comando desde la tabla de trabajos eliminando la tarea anterior y agregando una corregida.

¿Aún necesitas ayuda?

Envíanos un correo electrónico a support@kapsulehost.com o abre un chat en KPanel.

Abrir KPanel
Configuración y Gestión de Trabajos Cron