Errores de trabajos y tareas de Azure Batch

Pueden producirse varios errores al agregar, programar o ejecutar trabajos y tareas de Azure Batch. Es sencillo detectar errores que se producen al agregar trabajos y tareas. La API, la línea de comandos o la interfaz de usuario normalmente devuelven los errores inmediatamente. En este artículo se tratan los pasos para buscar y solucionar los errores que se producen una vez enviados los trabajos y las tareas.

Errores de trabajo

Un trabajo es un grupo de una o más tareas en el que se especifican las líneas de comandos que se ejecutarán. Puede especificar los siguientes parámetros opcionales al agregar un trabajo. Estos parámetros influyen en cómo se puede producir un error en el trabajo.

  • JobConstraints. Opcionalmente, puede usar la propiedad maxWallClockTime para establecer la cantidad máxima de tiempo que un trabajo puede estar activo o en ejecución. Si el trabajo supera maxWallClockTime, el trabajo finaliza con la propiedad terminateReason establecida en MaxWallClockTimeExpiry en JobExecutionInformation.

  • JobPreparationTask. Opcionalmente, puede especificar una tarea de preparación del trabajo para ejecutarse en cada nodo de proceso programado para ejecutar una tarea de trabajo. El nodo ejecuta la tarea de preparación del trabajo antes de la primera vez que ejecuta una tarea para el trabajo. Si se produce un error en la tarea de preparación del trabajo, la tarea no se ejecutará y el trabajo no se completará.

  • JobReleaseTask. Opcionalmente, puede especificar una tarea de liberación del trabajo para los trabajos que tienen una tarea de preparación del trabajo. Cuando se finaliza un trabajo, la tarea de liberación del trabajo se ejecuta en cada nodo de grupo que ejecutó una tarea de preparación del trabajo. Si se produce un error en una tarea de liberación del trabajo, el trabajo se mueve a un estado completed.

En Azure Portal, puede establecer estos parámetros en las secciones Administrador de trabajos, preparación y liberación y Opciones avanzadas de la pantalla Agregar trabajo de Batch.

Propiedades del trabajo

Compruebe las siguientes propiedades del trabajo en JobExecutionInformation para ver si hay errores:

  • La propiedad terminateReason indica MaxWallClockTimeExpiry si el trabajo superó el maxWallClockTime especificado en las restricciones de trabajo y, por tanto, el trabajo finalizó. Esta propiedad también se puede establecer en taskFailed si el atributo onTaskFailure del trabajo está establecido en performExitOptionsJobAction y se produce un error en una tarea con una condición de salida que especifica un jobAction de terminatejob.

  • La propiedad JobSchedulingError se establece si se ha producido un error de programación.

Tareas de preparación del trabajo

Una instancia de una tarea de preparación del trabajo se ejecuta en cada nodo de proceso la primera vez que el nodo ejecuta una tarea para el trabajo. La tarea de preparación del trabajo se puede considerar como una plantilla de tareas, con varias instancias en ejecución, hasta el número de nodos de un grupo. Compruebe las instancias de la tarea de preparación del trabajo para determinar si se produjeron errores:

Puede usar la API Job - List Preparation and Release Task Status para enumerar el estado de ejecución de todas las instancias de tareas de preparación y liberación del trabajo para un trabajo especificado. Al igual que con otras tareas, JobPreparationTaskExecutionInformation está disponible con propiedades como failureInfo, exitCode y result.

Cuando se ejecuta una tarea de preparación del trabajo, la tarea que desencadenó la tarea de preparación del trabajo pasa a un estado< taskState de preparing. Si se produce un error en la tarea de preparación del trabajo, la tarea desencadenadora se revierte al estado active y no se ejecuta.

Si se produce un error en una tarea de preparación del trabajo, la tarea del trabajo desencadenador no se ejecuta. El trabajo no se completa y se queda bloqueado. Si no hay otros trabajos con tareas que se puedan programar, el grupo puede quedar sin uso.

Tareas de liberación del trabajo

Cuando se finaliza un trabajo, se ejecuta una instancia de una tarea de liberación del trabajo en cada nodo que ejecutó una tarea de preparación del trabajo. Compruebe las instancias de la tarea de liberación del trabajo para determinar si se produjeron errores.

Puede usar la API Job - List Preparation and Release Task Status para enumerar el estado de ejecución de todas las instancias de tareas de preparación y liberación del trabajo para un trabajo especificado. Al igual que con otras tareas, JobReleaseTaskExecutionInformation está disponible con propiedades como failureInfo, exitCode y result.

Si se produce un error en una o varias tareas de liberación del trabajo, el trabajo se finaliza y pasa a un estado de completed.

Errores de tareas

Las tareas del trabajo pueden producir un error por las razones siguientes:

  • La línea de comandos de la tarea produce un error y devuelve un código de salida distinto de cero.
  • Uno o más resourceFiles especificados para una tarea no se descargan.
  • Uno o más outputFiles especificados para una tarea no se cargan.
  • El tiempo transcurrido para la tarea supera la propiedad maxWallClockTime especificada en TaskConstraints.

En todos los casos, compruebe si hay errores en las siguientes propiedades para obtener información sobre los errores:

  • La propiedad TaskExecutionInformation tiene varias propiedades que proporcionan información sobre un error. taskExecutionResult indica si se ha producido un error en la tarea por cualquier motivo, y exitCode y failureInfo proporcionan más información sobre el error.

  • La tarea siempre pasa al estado completedTaskState tanto si se ha completado correctamente como si ha producido un error.

Tenga en cuenta el impacto de los errores de las tareas en el trabajo y las dependencias de las tareas. Puede especificar ExitConditions para configurar acciones para las dependencias y para el trabajo.

  • DependencyAction controla si se van a bloquear o ejecutar tareas que dependen de la tarea con errores.
  • JobAction controla si la tarea con errores provoca que el trabajo se deshabilite, finalice o quede sin cambios.

Líneas de comandos de tarea

Las líneas de comandos de tarea no se ejecutan en un shell de nodos de ejecución, por lo que no pueden usar de manera nativa las características del shell, como la expansión de variables de entorno. Para beneficiarse de estas características, debe invocar el shell en la línea de comandos. Para obtener más información, consulte Expansión de línea de comandos de variables de entorno.

La salida de la línea de comandos de la tarea escribe en archivos stderr.txt y stdout.txt. La aplicación también puede escribir en archivos de registro específicos de la aplicación. Asegúrese de implementar una comprobación completa de errores para que la aplicación detecte y diagnostique problemas rápidamente.

Registros de tareas

Si el nodo de grupo que ejecutó una tarea sigue existiendo, puede obtener y ver los archivos de registro de las tareas. Varias API permiten enumerar y obtener archivos de tareas, como Archivo - Obtener de la tarea. También puede enumerar y ver los archivos de registro de una tarea o nodo mediante Azure Portal.

  1. En la parte superior de la página Información general del nodo, seleccione Cargar registros de lotes.

    Captura de pantalla de la página de información general de un nodo con la opción Cargar registros de Batch destacada.

  2. En la página Cargar registros de Batch, seleccione Elegir contenedor de almacenamiento, seleccione un contenedor de Azure Storage en el que cargar y, a continuación, seleccione Iniciar carga.

    Captura de pantalla de la página Carga de archivos de Batch.

  3. Puede ver, abrir o descargar los registros desde la página del contenedor de almacenamiento.

    Captura de pantalla de los registros de tarea en un contenedor de almacenamiento.

archivos de salida

Dado que los grupos de Batch y los nodos de grupo suelen ser efímeros, con nodos que se agregan y eliminan continuamente, es mejor guardar los archivos de registro cuando se ejecuta el trabajo. Los archivos de salida de la tarea son una manera cómoda de guardar los archivos de registro en Azure Storage. Para más información, consulte Almacenamiento de datos de tareas en Azure Storage con la API del servicio Batch.

En cada carga de archivos, Batch escribe dos archivos de registro en el nodo de proceso, fileuploadout.txt y fileuploaderr.txt Puede examinar estos archivos de registro para obtener más información sobre un error específico. Si la carga de archivos no se intentó, por ejemplo, porque no se pudo ejecutar la tarea propiamente dicha, estos archivos de registro no existen.

Pasos siguientes