Ir al contenido

Procesos asíncronos y tareas programadas

Histrix resuelve el trabajo que no puede correr dentro del request por dos vías distintas: un worker de Gearman para trabajos disparados por el usuario, y un planificador propio para tareas recurrentes.

El motor encola en Gearman dos tipos de trabajo:

Trabajo Origen
processContainer Grabación de un contenedor en segundo plano
send_email Envío de correo

Los trabajos se encolan con doBackground contra el servidor local, de modo que el request devuelve la respuesta sin esperar a que terminen.

Ventana de terminal
sudo apt-get install gearman php-gearman

El worker es cgi-bin/gearman_worker.php y se ejecuta como servicio de systemd. La unidad viene incluida en la instalación:

Ventana de terminal
sudo cp /usr/share/histrix/cgi-bin/histrix_worker.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable histrix_worker.service
sudo systemctl start histrix_worker.service

Verificación:

Ventana de terminal
systemctl status histrix_worker.service

El servicio está configurado con Restart=always, así que se levanta de nuevo si el worker termina.

Las tareas recurrentes de cada base se definen en la tabla HTX_CRONTAB y se administran desde la interfaz o por API (/api/db/{db}/crontab/). Cada fila tiene una expresión cron estándar, el comando a ejecutar y el usuario con cuya sesión debe correr.

El planificador evalúa qué tareas corresponden en el momento de la invocación y las ejecuta:

Ventana de terminal
php histrix scheduler {base}

Ese comando es el que se engancha al cron del sistema, una vez por base:

* * * * * cd /usr/share/histrix && php histrix scheduler cliente >> /var/log/histrix-cron.log 2>&1

Cada tarea se ejecuta con la sesión del usuario declarado en la fila, de modo que los permisos y los datos de contexto sean los de ese usuario y no los del proceso del cron.