Saltar a contenido

Ejecuciones, historial y avisos#

Cada vez que una tarea programada se ejecuta, a su hora o a mano, queda una ejecución en el historial con su resultado y sus pasos. Esta página explica cómo leer el historial, cómo detener una ejecución en marcha, cómo recibir avisos por correo y qué pasa con varias instancias del servidor.

Antes de empezar#

  • Ve las ejecuciones de los tipos de tarea que gestiona: los recálculos de libros con Administración de libros; los grupos y los procedimientos, con Administración del sistema. En las conexiones restringidas, solo quien administra el metadata.
  • Los avisos por correo necesitan un servidor de correo (véase Configuración y Correo).

El historial#

Últimas ejecuciones, en Planificación, da las de la conexión; Ejecuciones, en el detalle de una tarea, las suyas. Cada fila tiene:

Columna Qué muestra
Inicio Cuándo empezó.
Tarea La tarea (solo en el historial de la conexión).
Por Programada o A mano, y en nombre de quién.
Resultado El estado, con su icono.
Duración Lo que tardó o lo que lleva.
El historial de ejecuciones de una tarea con una ejecución desplegada que enseña sus pasos: procedimiento previo, dos libros y procedimiento posteriorEl historial de ejecuciones de una tarea con una ejecución desplegada que enseña sus pasos: procedimiento previo, dos libros y procedimiento posterior
El historial de ejecuciones de una tarea con una ejecución desplegada que enseña sus pasos: procedimiento previo, dos libros y procedimiento posterior

Despliegue una ejecución para ver sus pasos: Procedimiento previo, cada Libro (con sus intentos) o Documento, Procedimiento y Procedimiento posterior, cada uno con su resultado y su mensaje.

Resultado Qué significa
En marcha Se está ejecutando.
Bien Terminó bien. Un recálculo sin documentos que conserven datos termina bien diciéndolo: «Ningún documento del libro conserva datos: no hay nada que recalcular».
Error Falló. El mensaje del paso dice por qué.
No se hizo Le tocaba, pero la ejecución anterior seguía en marcha: no se solapan. El mensaje dice cuál sigue en marcha y en qué instancia. Se avisa como un error.
Detenida Alguien la detuvo («Detenida por «login»»). No es un fallo.

El historial se conserva 90 días (ecenter.scheduling.history) y cada ejecución queda también en la auditoría como Ejecución programada, con el canal Tarea programada y la referencia sch-run:<ejecución>. Para ver todo lo que calculó una ejecución (sus consultas, sus trabajos), abra su entrada en la auditoría y pulse Incluir junto al canal (véase Buscar, filtrar y exportar).

Ejecutar ahora#

Ejecutar ahora, en el detalle de una tarea, la lanza en el momento, en su nombre, sin esperar turno y sin cambiar su siguiente ejecución. Si ya está en marcha, no se lanza otra (409: «La tarea '…' ya está en marcha»).

Detener una ejecución#

  1. Abra la tarea en marcha y pulse Detener….
  2. Lea lo que pasará y confirme con Detener:
    • un procedimiento: «Se cancela la llamada al procedimiento en la base de datos, que deshace lo que no había confirmado»;
    • un grupo: «Se cancelan los libros que se están recalculando y no se llama al procedimiento posterior»;
    • un recálculo: «Se cancelan los documentos que se están recalculando».

La ejecución termina como Detenida, a su nombre. Los libros ya recalculados se quedan recalculados, y lo que un procedimiento hubiera confirmado por su cuenta queda hecho. Si terminó justo antes de que llegara la petición, queda bien («(se pidió detenerla cuando ya terminaba)»). Queda en la auditoría como Ejecución programada detenida, con en nombre de quién corría.

Con varias instancias, la detiene la instancia que la tiene en marcha: enseguida si es la que recibe la petición y, si es otra, en su siguiente vuelta (unos segundos).

Avisos por correo#

El planificador puede avisar por correo del resultado de cada ejecución. Se configura en el servidor:

Propiedad Por defecto Qué es
ecenter.scheduling.notifications.mode NONE NONE: no se avisa. ALL: todas las ejecuciones. FAILURES: las que fallan o no se hicieron (una detenida a mano no es un fallo).
ecenter.scheduling.notifications.recipients (ninguno) Las direcciones. Sin destinatarios no se avisa.
ecenter.scheduling.notifications.from ecenter.notifications.from El remitente.
ECENTER_SCHEDULING_NOTIFICATIONS_MODE=FAILURES
ECENTER_SCHEDULING_NOTIFICATIONS_RECIPIENTS=sistemas@example.org

El asunto dice el resultado, la tarea y la conexión: «[Empowerment Center] Falló «Cierre comercial diario» (Demo · Distribuciones Ibéricas)», o «Terminó», «No se ejecutó», «Se detuvo». El cuerpo da la tarea y su tipo, la conexión, en nombre de quién (o quién la ejecutó a mano), el inicio, el fin, la duración, el resultado y cada paso con su resultado, sus intentos y su mensaje.

La alerta de tareas que fallan seguidas#

Aunque no haya avisos por correo, la consola de operación abre la alerta Tarea programada que falla seguida cuando una tarea activa falla sus últimas 3 ejecuciones seguidas (ecenter.operations.alerts.scheduled-failures), con su nombre, su tipo, su conexión y el último motivo. Las no hechas y las detenidas a mano no cuentan ni cortan la racha. Se resuelve sola cuando la tarea termina bien, se desactiva o se elimina. Véase Alertas operativas.

Varias instancias#

ECenter está pensado para una instancia, pero la planificación funciona igual con varias:

  • Solo una instancia revisa las tareas a la vez, con un bloqueo en la BD propia, y cada tarea la lanza la que consigue pasarla a su siguiente ejecución. No se ejecuta dos veces.
  • Una sola ejecución en marcha por tarea, también entre instancias: lo garantiza la BD. A su hora, una ejecución que coincide con otra en marcha queda como No se hizo.
  • Cada ejecución sabe de qué instancia es (ECENTER_INSTANCE_NAME). Al arrancar, cada instancia da por interrumpidas solo las suyas que quedaron en marcha; las de otra siguen, porque son suyas.

Importante

Dé a cada instancia un nombre fijo con ECENTER_INSTANCE_NAME (deploy/compose.yaml pone ecenter-1). Si una instancia se retira para siempre con ejecuciones en marcha, esas ejecuciones bloquean su tarea hasta que arranque una instancia con el mismo nombre, que las da por interrumpidas.

Lanzar una tarea desde otro sistema#

Un proceso externo (un ETL que termina, un orquestador) puede lanzar una tarea por la API REST, con una sesión de la aplicación de un usuario que tenga el privilegio de su tipo: inicia sesión en POST /api/auth/login y envía la cookie de sesión y la cabecera X-XSRF-TOKEN (que da GET /api/auth/csrf), como el frontal. La planificación no tiene credenciales de servicio.

Petición Qué hace
POST /api/scheduled-tasks/{id}/run Ejecutar ahora: 202 con la ejecución; 409 si ya está en marcha.
GET /api/scheduled-runs/{id} El estado de una ejecución con sus pasos.
POST /api/scheduled-runs/{id}/stop Detener: 202; 409 si ya había terminado.

Configuración#

Propiedad Por defecto Qué es
ecenter.scheduling.enabled true false: no se lanza nada a su hora (Ejecutar ahora sigue)
ecenter.scheduling.tick 15s Cada cuánto se revisan las tareas
ecenter.scheduling.zone la del servidor La zona horaria de las programaciones, por ejemplo Europe/Madrid
ecenter.scheduling.max-running 4 Tareas en marcha a la vez en una instancia
ecenter.scheduling.recalc-timeout 2h Cada intento de recalcular un libro
ecenter.scheduling.procedure-timeout 2h Un procedimiento programado
ecenter.scheduling.step-timeout 30m El procedimiento previo o el posterior de un grupo
ecenter.scheduling.history 90d Lo que se conserva el historial
ecenter.scheduling.instance-name ECENTER_INSTANCE_NAME o el nombre del equipo La instancia de cada ejecución
ecenter.scheduling.notifications.* NONE Los avisos por correo (arriba)

Véase también#