Partager via


Erreurs dans les travaux et les tâches Azure Batch

Diverses erreurs peuvent se produire lorsque vous ajoutez, planifiez ou exécutez des tâches et des travaux Azure Batch. Il est simple de détecter les erreurs qui se produisent lorsque vous ajoutez des travaux et des tâches. L’API, la ligne de commande ou l’interface utilisateur retourne généralement les échecs immédiatement. Cet article explique comment vérifier et traiter les erreurs qui se produisent après l’envoi de travaux et de tâches.

Échecs des travaux

Un travail est un groupe d’une ou plusieurs tâches, qui spécifient les lignes de commande à exécuter. Vous pouvez spécifier les paramètres facultatifs suivants lorsque vous ajoutez un travail. Ces paramètres influencent la façon dont le travail peut échouer.

  • JobConstraints. Si nécessaire, vous pouvez utiliser la propriété maxWallClockTime pour définir la durée maximale pendant laquelle un travail peut être actif ou en cours d’exécution. Si le travail dépasse le maxWallClockTime, il se termine avec la propriété terminateReason fixée à MaxWallClockTimeExpiry dans le JobExecutionInformation.

  • JobPreparationTask. Si nécessaire, vous pouvez spécifier une tâche de préparation du travail à exécuter sur chaque nœud de calcul programmé pour exécuter une tâche de travail. Le nœud exécute la tâche de préparation du travail avant la première exécution d’une tâche pour le travail. Si la tâche de préparation du travail échoue, la tâche ne s’exécute pas et la travail ne se termine pas.

  • JobReleaseTask. Si nécessaire, vous pouvez spécifier une tâche de mise en production de travail pour les travaux qui ont une tâche de préparation de travail. Lorsqu’un travail est terminé, la tâche de mise en production du travail s’exécute sur chaque nœud de pool qui a exécuté une tâche de préparation de travail. Si une tâche de mise en production de travail échoue, le travail passe quand même à l’état completed.

Dans le Portail Azure, vous pouvez définir ces paramètres dans le gestionnaire de travaux, les tâches de préparation et de mise en production et les sections Avancées de l’écran Ajouter un travail par lot.

Propriétés du travail

Recherchez les erreurs dans les propriétés de travail suivantes dans JobExecutionInformation :

  • La propriété terminateReason indique MaxWallClockTimeExpiry si le travail a dépassé le maxWallClockTime spécifié dans les contraintes de travail et s’est donc terminé. Cette propriété peut également être définie sur taskFailed si l’attribut onTaskFailure du travail est défini sur performExitOptionsJobActionet qu’une tâche échoue avec une condition de sortie qui spécifie un jobAction de terminatejob.

  • La propriété JobSchedulingError est définie si une erreur de planification s’est produite.

Tâches de préparation du travail

Une instance d’une tâche de préparation de travail s’exécute sur chaque nœud de calcul la première fois que le nœud exécute une tâche pour le travail. Vous pouvez considérer la tâche de préparation de travail comme un modèle de tâche, avec plusieurs instances en cours d’exécution, jusqu’au nombre de nœuds dans un pool. Vérifiez les instances de tâche de préparation de travail pour déterminer s’il y a eu des erreurs.

Vous pouvez utiliser l’API Job - List Preparation and Release Task Status pour répertorier l’état d’exécution de toutes les instances de tâches de préparation et de mise en production d’un travail spécifié. Comme pour les autres tâches, JobPreparationTaskExecutionInformation est disponible avec des propriétés telles que failureInfo, exitCodeet result.

Lorsqu’une tâche de préparation de travail s’exécute, la tâche qui a déclenché la tâche de préparation de travail passe à un taskState de preparing. Si la tâche de préparation de travail échoue, la tâche de déclenchement revient à l’état active et ne s’exécute pas.

Si une tâche de préparation de travail échoue, la tâche de déclenchement ne s’exécute pas. Le travail n’est pas terminé et est bloqué. S’il n’existe aucun autre travail avec des tâches pouvant être programmées, le pool peut ne pas être utilisé.

Tâches de validation du travail

Une instance d’une tâche de mise en production de travail s’exécute lorsque le travail est terminé sur chaque nœud qui a exécuté une tâche de préparation de travail. Vérifiez les instances de tâche de mise en production du travail pour déterminer s’il y a eu des erreurs.

Vous pouvez utiliser l’API Job - List Preparation and Release Task Status pour répertorier l’état d’exécution de toutes les instances de tâches de préparation et de mise en production d’un travail spécifié. Comme pour les autres tâches, JobReleaseTaskExecutionInformation est disponible avec des propriétés telles que failureInfo, exitCodeet result.

Si une ou plusieurs tâches de mise en production du travail échouent, le travail est quand même terminé et passe à un état completed.

Échecs de tâches

Les tâches peuvent échouer pour les raisons suivantes :

  • La ligne de commande de la tâche échoue et renvoie un code de sortie différent de zéro.
  • Un ou plusieurs resourceFiles spécifiés pour une tâche ne sont pas téléchargés.
  • Un ou plusieurs outputFiles spécifiés pour une tâche ne sont pas chargés.
  • La durée calendaire pour la tâche dépasse la propriété maxWallClockTime spécifiée dans TaskConstraints.

Dans tous les cas, vérifiez que les propriétés suivantes ne contiennent pas d’erreurs et d’informations relatives à ces erreurs :

  • La propriété TaskExecutionInformation possède plusieurs propriétés qui fournissent des informations sur une erreur. La propriété taskExecutionResult indique si la tâche a échoué pour une raison quelconque, et les propriétés exitCode et failureInfo fournissent plus d’informations sur l’échec.

  • La tâche passe toujours à la propriété completed TaskState, qu’elle ait réussi ou échoué.

Tenez compte de l’impact des échecs de tâches sur le travail et sur toutes les dépendances de tâches. Vous pouvez spécifier ExitConditions pour configurer des actions pour les dépendances et pour le travail.

  • DependencyAction contrôle s’il faut bloquer ou exécuter des tâches qui dépendent de la tâche ayant échoué.
  • JobAction contrôle si l’échec de la tâche entraîne la désactivation, l’interruption ou le maintien du travail.

Lignes de commande des tâches

Les lignes de commande des tâches ne s’exécutent pas sous un interpréteur de commandes sur les nœuds de calcul, de sorte qu’elles ne peuvent pas utiliser nativement les fonctionnalités de l’interpréteur de commandes telles que l’expansion des variables d’environnement. Pour tirer parti de ces fonctionnalités, vous devez appeler l’interpréteur de commandes dans la ligne de commande. Pour plus d’informations, consultez Extension de la ligne de commande des variables d’environnement.

La sortie de ligne de commande de tâche écrit dans des fichiers stderr.txt et stdout.txt. Votre application peut également écrire dans des fichiers journaux spécifiques à l’application. Veillez à implémenter une vérification complète des erreurs pour que votre application puisse détecter et diagnostiquer rapidement les problèmes.

Journaux des tâches

Si le nœud de pool qui a exécuté une tâche existe toujours, vous pouvez obtenir et afficher les fichiers journaux des tâches. Plusieurs API permettent de répertorier et d’obtenir des fichiers de tâches, tels que Fichier - Obtenir à partir d’une tâche. Vous pouvez également répertorier et afficher les fichiers journaux d’une tâche ou d’un nœud à l’aide de la Portail Azure.

  1. En haut de la page Vue d’ensemble d’un nœud, sélectionnez Charger les journaux de traitement par lots.

    Capture d’écran d’une page de vue d’ensemble d’un nœud avec les journaux de traitement par lots en surbrillance.

  2. Dans la page Charger les journaux de traitement par lots, sélectionnez Choisir un conteneur de stockage, sélectionnez un conteneur de stockage Azure à télécharger, puis sélectionnez Démarrer le chargement.

    Capture d’écran de la page Charger les journaux de traitement par lots.

  3. Vous pouvez afficher, ouvrir ou télécharger les journaux à partir de la page du conteneur de stockage.

    Capture d’écran des journaux de tâches dans un conteneur de stockage.

Fichiers de sortie

Étant donné que les pools Batch et les nœuds de pool sont souvent éphémères et que des nœuds sont continuellement ajoutés et supprimés, il est préférable d’enregistrer les fichiers journaux lors de l’exécution du travail. Les fichiers de sortie de tâche sont un moyen pratique d’enregistrer des fichiers journaux dans Stockage Azure. Pour en savoir plus, consultez l’article Conserver les données de tâche dans Azure Storage avec l’API de service Batch.

À chaque chargement de fichier, Batch écrit deux fichiers journaux dans le nœud de calcul, fileuploadout.txt et fileuploaderr.txt. Vous pouvez examiner ces fichiers journaux pour en savoir plus sur un échec spécifique. Si le téléchargement du fichier n’a pas été tenté, par exemple parce que la tâche elle-même n’a pas pu être exécutée, ces fichiers journaux n’existent pas.

Étapes suivantes