Workers y tareas programadas
Procesos que corren siempre, como una cola de trabajos, y comandos que se ejecutan con un horario, como el programador de Laravel. Usan el código y las variables de una app ya publicada.
Muchas apps necesitan algo más que atender visitas: procesar una cola de correos, generar informes por la noche o limpiar datos cada hora. En Dilohost eso se hace con dos tipos de proceso que salen del código de una app ya publicada.
| Tipo | Qué es | Ejemplo |
|---|---|---|
| Worker | Un proceso que corre siempre y se reinicia si se cae. | php artisan queue:work, node worker.js, celery -A app worker |
| Tarea programada | Un comando que se ejecuta con un horario. | php artisan schedule:run cada 5 minutos, un informe a las 3:00 |
No hace falta supervisor, cron ni nada parecido dentro de tu app: Dilohost se ocupa de arrancarlos.
Antes de empezar
- La app de la que salen tiene que estar publicada (y no suspendida).
- Cada worker y cada tarea cuenta como un recurso más en el límite de apps de tu plan. En el plan Gratis, que admite una sola app con servidor, no queda sitio para workers ni tareas. Ver Planes y precios.
Añadir un worker
Añade un worker a la tienda que ejecute «php artisan queue:work» con el código de la app web.
El agente usa jobs.add_worker con un nombre para el worker (1-20 minúsculas y números), la app de la que sale y el comando. El worker:
- usa la misma versión del código y las mismas variables que su app, y se actualiza solo cuando publicas una versión nueva;
- se reinicia si el proceso termina o falla.
Añadir una tarea programada
Programa «php artisan schedule:run» cada 5 minutos en la tienda.
El agente usa jobs.add_cron con el comando y el horario en formato cron de 5 campos, en hora de Madrid:
| Horario | Cuándo |
|---|---|
*/5 * * * * |
Cada 5 minutos |
0 * * * * |
Cada hora, en punto |
30 3 * * * |
Todos los días a las 3:30 |
0 9 * * 1 |
Los lunes a las 9:00 |
0 0 1 * * |
El día 1 de cada mes a medianoche |
Reglas:
- Como mínimo cada 5 minutos. Un horario más frecuente se rechaza.
- Solo números,
*, rangos (1-5), listas (1,15) y pasos (*/10). - Si una ejecución sigue en marcha cuando toca la siguiente, la siguiente no empieza: nunca se solapan.
- Cada ejecución puede durar como mucho una hora. Si falla, no se reintenta: vuelve a ejecutarse en la siguiente hora prevista por su horario.
Consejo
En Laravel basta con una tarea:
php artisan schedule:runcada 5 minutos, y los horarios los sigues definiendo en tu código. Comoschedule:runsolo ejecuta lo que toca en el minuto en que se lanza, programa tus tareas en minutos múltiplos de 5 (everyFiveMinutes(),hourly(),dailyAt('03:30')…): una a las 3:07 no se ejecutaría nunca.
Ver y quitar
¿Qué workers y tareas tiene la tienda?
jobs.list enseña cada uno con su tipo, la app de la que sale, el comando y el horario.
Quita la tarea de informes de la tienda.
jobs.remove pide confirmación y deja de ejecutarlo. La app de la que sale no se toca.
Ver lo que hacen
La salida de un worker o de una tarea se lee igual que la de una app:
Enséñame los últimos registros del worker «cola» de la tienda.
El agente usa app.logs con el nombre del worker o de la tarea. Ver Diagnóstico.