Termina el trabajo de impresión actual

DockerBeginner
Practicar Ahora

Introducción

Paper & Pine necesita ahora terminar un programa comunitario de doce páginas antes de detenerse. Su entrada ya entrega SIGTERM correctamente, pero la gracia de un segundo de Compose interrumpe al trabajador antes de completar su PDF real. Establece una gracia finita y reutilizable con suficiente margen, sin iniciar el siguiente trabajo.

Completa primero Deliver the Stop Signal o conoce su shell de entrada, PID 1, distinción TERM/KILL, observaciones de trabajos y comandos básicos de Compose. Este laboratorio independiente prepara su propio programa, PDF anterior, cola de práctica y cola de entrega. No se necesitan archivos de VM anteriores, programación Python ni impresora física.

Usa Workstation y Print Desk. La pausa de primera página y la limitación de 0,5 segundos de las páginas restantes son comportamientos didácticos declarados. La gracia de parada comienza con la solicitud de parada, no cuando el trabajador entra por primera vez en pausa. Calcula unos 45 minutos, incluidos la lectura y los errores habituales; es una estimación del autor.

Da tiempo al programa actual para terminar

En este paso, distinguirás una entrega correcta de señal de un tiempo suficiente para terminar y completarás el trabajo de entrega original dentro de una gracia finita de Compose.

Establece el trabajo y el límite actual

Empieza en Print Desk. Bajo Delivery attempt, previsualiza y descarga el Morning welcome handout completado. El Community open day programme actual necesita doce páginas PDF reales; Volunteer notes es un trabajo posterior que debe seguir pendiente. Práctica y entrega son colas de entrenamiento separadas con archivos separados.

Cambia a Workstation, que comienza en /home/labex/project/print-grace:

cd /home/labex/project/print-grace
cat entry.sh
cat compose.yaml

La entrada ya usa exec python3 -B /app/worker.py, por lo que el trabajador proporcionado sustituye al shell y recibe la solicitud TERM de Docker. El problema es stop_grace_period: 1s. Una vez termina la pausa de práctica, once intervalos restantes de 0,5 segundos más la finalización del PDF necesitan más tiempo. Esperar más antes de pedir la parada no aumenta la gracia: el trabajador espera deliberadamente TERM antes de terminar su trabajo.

Conserva sin cambios la imagen preparada, los ID de usuario, los montajes, el programa de entrada y los demás ajustes Compose. Solo ajustarás el límite finito de parada; una espera ilimitada no es el resultado deseado.

Observa un intento de práctica realmente truncado

Inicia el proyecto de práctica proporcionado:

docker compose -f compose.trial.yaml -p print-trial up -d --pull never --no-build

Cambia a Print Desk, recarga y espera a que Practice attempt muestre su pausa de primera página. Vuelve a Workstation y solicita su parada de un segundo:

docker compose -f compose.trial.yaml -p print-trial stop worker
docker inspect print-trial --format '{{.State.ExitCode}}'
docker logs print-trial

La operación de parada de Docker puede devolver 0 mientras el código de salida del trabajador es 137. A diferencia del fallo de shell incorrecto del laboratorio anterior, este registro incluye stop-received y puede incluir algunos eventos de páginas restantes, pero no un PDF completo de doce páginas ni una finalización normal. La entrega de señal funcionó; la gracia expiró durante el trabajo real restante.

Cambia a Print Desk y recarga. La práctica no tiene una descarga finalizada del programa actual. Los PDF anteriores y la cola de entrega sin tocar permanecen intactos. No completes el resultado que falta con un segundo procesador.

Guarda una sustitución finita de Compose antes de iniciar la entrega

Cambia a Workstation. Una pequeña sustitución permite conservar el archivo base proporcionado y cambiar solo el límite de parada. Dos argumentos -f combinan los archivos en orden; el services.worker.stop_grace_period posterior sustituye esa única propiedad. Usa la misma pareja para inspeccionar la configuración, iniciar y detener.

Elige una gracia finita de segundos enteros de como máximo 30 segundos. Quince segundos dan a este programa didáctico declarado espacio para sus páginas restantes y la sobrecarga normal de planificación. Es un margen práctico, no una afirmación de que todo PDF de producción termina en ese tiempo.

Usa el here-document literal enseñado en el primer laboratorio guiado para guardar compose.stop.yaml:

cat > compose.stop.yaml <<'COMPOSE'
services:
  worker:
    stop_grace_period: 15s
COMPOSE
docker compose -f compose.yaml -f compose.stop.yaml -p print-delivery config

Busca stop_grace_period: 15s en la configuración efectiva. La imagen preparada, el usuario numérico, el script de entrada y la entrada de solo lectura siguen iguales. Si la sangría YAML es incorrecta, corrige el bloque pequeño y vuelve a analizar antes de iniciar. Un archivo cambiado no reescribe los valores predeterminados de un contenedor ya creado, por lo que debes guardar este límite antes de iniciar la entrega.

Inicia la entrega con esa misma pareja de archivos:

docker compose -f compose.yaml -f compose.stop.yaml -p print-delivery up -d --pull never --no-build

Cambia a Print Desk, recarga y espera a que Delivery attempt muestre la pausa de práctica. Después cambia a Workstation y usa la misma configuración efectiva para detenerlo:

docker compose -f compose.yaml -f compose.stop.yaml -p print-delivery stop worker
docker inspect print-delivery --format '{{.State.ExitCode}}'
docker logs print-delivery

El trabajador debe terminar con 0 después de stop-received, los doce eventos de páginas, completed del trabajo actual y worker-stopped. Su identidad de ejecución y proceso sigue siendo la misma al recibir la solicitud y terminar el programa. Conserva este contenedor detenido; no lo elimines como atajo de limpieza.

Usa el PDF completo y conserva el resto del trabajo

Cambia a Print Desk, recarga y selecciona Preview text del programa actual bajo Delivery attempt. Decodifica el PDF real guardado. Inspecciona la primera y última página y todos los títulos de sección y números de página intermedios. Descarga el programa y abre sus doce páginas. Vuelve al mostrador y confirma que el folleto de la mañana no cambió y que Volunteer notes sigue pendiente sin PDF.

La entrega tiene ahora un trabajador detenido normalmente y una descarga real de doce páginas. La práctica sigue visiblemente sin éxito, mientras el trabajo posterior está pendiente:

Print Desk después de completar el programa entero

Las comprobaciones unen hechos reales de TERM/salida de Docker, la identidad del trabajador original, el contenido real de páginas decodificadas y la conservación de la cola. Una reproducción desechable prueba la entrada guardada y la gracia finita efectiva en otro programa. No envía señales ni repara tu trabajador real.

Recupera una entrega fallida

Si tu intento de entrega falla, conserva el contenedor detenido el tiempo necesario para leer sus registros y estado de salida. Corrige solo la entrada o la configuración de gracia. La acción de recuperación proporcionada rechaza un contenedor en ejecución o terminado correctamente; para un trabajador del curso detenido sin éxito, vuelve a poner en cola solo el trabajo actual y conserva los archivos fallidos en delivery/attempt-history/. Conserva el PDF anterior, las entradas originales y el trabajo posterior pendiente:

python3 /opt/labex/dk05/source/retry.py

Tras esa recuperación explícita, elimina solo los contenedores del proyecto de entrega fallido con docker compose -p print-delivery down y repite la secuencia mostrada de inicio de entrega, espera de pausa y parada. No se regenera ningún PDF fuente y ninguna pestaña ni comprobación de puntuación ejecuta esta recuperación. No restablezcas la VM ni cambies el JSON de la cola para ocultar un intento fallido.

Resumen

Distinguiste entre recibir una solicitud de parada y tener suficiente tiempo para terminar un trabajo. Una gracia finita guardada en Compose permitió que el trabajador original terminara las doce páginas PDF, saliera normalmente y conservara tanto la salida anterior como el trabajo posterior pendiente.