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 lemaxWallClockTime
, 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
indiqueMaxWallClockTimeExpiry
si le travail a dépassé lemaxWallClockTime
spécifié dans les contraintes de travail et s’est donc terminé. Cette propriété peut également être définie surtaskFailed
si l’attributonTaskFailure
du travail est défini surperformExitOptionsJobAction
et qu’une tâche échoue avec une condition de sortie qui spécifie unjobAction
determinatejob
.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
, exitCode
et 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
, exitCode
et 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
etfailureInfo
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.
En haut de la page Vue d’ensemble d’un nœud, sélectionnez Charger les journaux de traitement par lots.
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.
Vous pouvez afficher, ouvrir ou télécharger les journaux à partir de la page du 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
- En savoir plus sur les travaux et les tâches Batch, ainsi que sur la préparation du travail et les tâches de mise en production.
- Découvrez les erreurs de pool et de nœud Batch.