Fehler bei Azure Batch-Aufträgen und -Tasks
Beim Hinzufügen, Planen oder Ausführen von Azure Batch-Aufträgen und -Tasks können verschiedene Fehler auftreten. Es ist einfach, Fehler zu erkennen, die beim Hinzufügen von Aufträgen und Tasks auftreten. Die API, Befehlszeile oder Benutzeroberfläche gibt in der Regel alle Fehler sofort zurück. Dieser Artikel befasst sich mit der Suche nach Fehlern, die nach der Übermittlung von Aufträgen und Tasks auftreten, sowie mit deren Behandlung.
Auftragsfehler
Ein Auftrag ist eine Gruppe eines oder mehrerer Tasks, die die auszuführenden Befehlszeilen angeben. Sie können die folgenden optionalen Parameter angeben, wenn Sie einen Auftrag hinzufügen. Diese Parameter beeinflussen, wie der Auftrag fehlschlagen kann.
JobConstraints. Sie können optional die Eigenschaft
maxWallClockTime
verwenden, um die maximale Zeitspanne festzulegen, die ein Auftrag aktiv sein oder ausgeführt werden kann. Wenn der AuftragmaxWallClockTime
überschreitet, wird die EigenschaftterminateReason
in JobExecutionInformation aufMaxWallClockTimeExpiry
festgelegt und der Auftrag beendet.JobPreparationTask. Optional können Sie einen Auftragsvorbereitungstask angeben, der auf jedem Computeknoten ausgeführt werden soll, für den die Ausführung eines Auftragstasks geplant ist. Der Knoten führt den Auftragsvorbereitungstask aus, bevor er einen Task für den Auftrag zum ersten Mal ausführt. Wenn der Auftragsvorbereitungstask fehlschlägt, wird der Task nicht ausgeführt, und der Auftrag wird nicht abgeschlossen.
JobReleaseTask. Optional können Sie einen Auftragsfreigabetask für Aufträge angeben, die über einen Auftragsvorbereitungstask verfügen. Wird ein Auftrag beendet, wird der Auftragsfreigabetask auf jedem Poolknoten ausgeführt, auf dem ein Auftragsvorbereitungstask ausgeführt wurde. Wenn ein Auftragsfreigabetask fehlschlägt, wechselt der Auftrag trotzdem in den Status „
completed
“.
Im Azure-Portal können Sie diese Parameter in den Abschnitten Auftrags-Manager, Vorbereitungs- und Freigabetasks sowie Erweitert des Azure Batch-Bildschirms Auftrag hinzufügen festlegen.
Auftragseigenschaften
Überprüfen Sie die folgenden Auftragseigenschaften in JobExecutionInformation auf Fehler:
Die Eigenschaft
terminateReason
gibtMaxWallClockTimeExpiry
an, ob der Auftrag den in den Auftragseinschränkungen festgelegtenmaxWallClockTime
-Wert überschreitet und der Auftrag daher beendet wurde. Diese Eigenschaft kann auch auftaskFailed
festgelegt werden, wenn das AttributonTaskFailure
des Auftrags aufperformExitOptionsJobAction
festgelegt ist und ein Task mit einer Exitbedingung fehlschlägt, die einejobAction
vonterminatejob
angibt.Die Eigenschaft JobSchedulingError wird festgelegt, wenn ein Zeitplanungsfehler aufgetreten ist.
Task zur Auftragsvorbereitung
Auf jedem Computeknoten wird eine Instanz eines Auftragsvorbereitungstasks ausgeführt, wenn der Knoten zum ersten Mal einen Task für den Auftrag ausführt. Den Auftragsvorbereitungstask können Sie sich als Taskvorlage vorstellen, wobei mehrere Instanzen bis zur Anzahl der Knoten in einem Pool ausgeführt werden. Überprüfen Sie die Instanzen des Auftragsvorbereitungstasks, um festzustellen, ob Fehler aufgetreten sind.
Sie können die API Auftrag – Auflisten des Status von Vorbereitungs- und Freigabetasks verwenden, um den Ausführungsstatus aller Instanzen von Auftragsvorbereitungs- und Freigabetasks für einen angegebenen Auftrag aufzulisten. Wie bei anderen Tasks ist JobPreparationTaskExecutionInformation mit Eigenschaften wie failureInfo
, exitCode
und result
verfügbar.
Wird ein Auftragsvorbereitungstask ausgeführt, wird der Task, der den Auftragsvorbereitungstask ausgelöst hat, in den taskState „preparing
“ versetzt. Wenn der Auftragsvorbereitungstask fehlschlägt, wird der auslösende Task in den Status „active
“ zurückgesetzt und nicht ausgeführt.
Wenn ein Auftragsvorbereitungstask fehlschlägt, wird der auslösende Auftragstask nicht ausgeführt. Der Auftrag wird nicht abgeschlossen und bleibt hängen. Wenn es keine anderen Aufträge mit Tasks gibt, die geplant werden können, wird der Pool möglicherweise nicht verwendet.
Tasks zur Auftragsfreigabe
Wird der Auftrag beendet, wird eine Instanz des Auftragsfreigabetasks auf jedem Knoten ausgeführt, auf dem ein Auftragsvorbereitungstask ausgeführt wurde. Überprüfen Sie die Instanzen des Auftragsfreigabetasks, um festzustellen, ob Fehler aufgetreten sind.
Sie können die API Auftrag – Auflisten des Status von Vorbereitungs- und Freigabetasks verwenden, um den Ausführungsstatus aller Instanzen von Auftragsvorbereitungs- und Freigabetasks für einen angegebenen Auftrag aufzulisten. Wie bei anderen Tasks ist JobReleaseTaskExecutionInformation mit Eigenschaften wie failureInfo
, exitCode
und result
verfügbar.
Wenn mindestens ein Auftragsfreigabetask fehlschlägt, wird der Auftrag dennoch beendet und wechselt in den Status „completed
“.
Taskfehler
Bei Auftragstasks können aus folgenden Gründen Fehler auftreten:
- Die Taskbefehlszeile schlägt fehl und gibt einen Exitcode ungleich NULL zurück.
- Mindestens eine für einen Task angegebene
resourceFiles
wird nicht heruntergeladen. - Mindestens eine für einen Task angegebene
outputFiles
wird nicht hochgeladen. - Die verstrichene Zeit für den Task überschreitet die in TaskConstraints angegebene
maxWallClockTime
-Eigenschaft.
In allen Fällen müssen Sie die folgenden Eigenschaften auf Fehler und Informationen zu den Fehlern überprüfen:
Die Eigenschaft TaskExecutionInformation enthält mehrere Eigenschaften, die Informationen zu einem Fehler bereitstellen. taskExecutionResult gibt an, ob der Task aus einem bestimmten Grund fehlgeschlagen ist, wobei
exitCode
undfailureInfo
weitere Informationen zum Fehler bereitstellen.Der Task wechselt immer in den TaskState „
completed
“, unabhängig davon, ob er erfolgreich war oder nicht.
Berücksichtigen Sie die Auswirkungen von Taskfehlern auf den Auftrag und alle Taskabhängigkeiten. Sie können ExitConditions angeben, um Aktionen für Abhängigkeiten und für den Auftrag zu konfigurieren.
- DependencyAction steuert, ob Tasks, die von dem fehlerhaften Task abhängen, blockiert oder ausgeführt werden.
- JobAction steuert, ob der fehlerhafte Task dazu führt, dass der Auftrag deaktiviert, beendet oder unverändert gelassen wird.
Taskbefehlszeilen
Taskbefehlszeilen laufen nicht unter einer Shell auf Computeknoten, sodass sie Shellfeatures wie die Erweiterung von Umgebungsvariablen nicht nativ verwenden können. Um solche Features nutzen zu können, muss das Aufrufen der Shell an der Befehlszeile erfolgen. Weitere Informationen finden Sie unter Befehlszeilenerweiterung von Umgebungsvariablen.
Die Taskbefehlszeilen-Ausgabe schreibt in stderr.txt- und stdout.txt-Dateien. Ihre Anwendung schreibt möglicherweise auch in anwendungsspezifische Protokolldateien. Stellen Sie sicher, dass Sie eine umfassende Fehlerüberprüfung für Ihre Anwendung implementieren, um Probleme sofort zu erkennen und zu diagnostizieren.
Aufgabenprotokolle
Wenn der Poolknoten, auf dem ein Task ausgeführt wurde, noch vorhanden ist, können Sie die Taskprotokolldateien abrufen und anzeigen. Mehrere APIs ermöglichen das Auflisten und Abrufen von Taskdateien, z. B Datei – Abrufen aus Task. Sie können Protokolldateien für einen Task oder Knoten auch im Azure-Portal auflisten und anzeigen.
Wählen Sie oben auf der Seite Übersicht für einen Pool Batchprotokolle hochladenaus.
Wählen Sie auf der Seite Azure Batch-Protokolle hochladen die Option Speichercontainer auswählen und dann einen Azure Storage-Container aus, in den Sie die Protokolle hochladen möchten. Wählen Sie anschließend Upload starten aus.
Sie können die Protokolle auf der Seite des Speichercontainers anzeigen, öffnen oder herunterladen.
Ausgabedateien
Da Azure Batch-Pools und Poolknoten häufig kurzlebig sind und Knoten kontinuierlich hinzugefügt und gelöscht werden, empfiehlt es sich, die Protokolldateien zu speichern, während der Auftrag ausgeführt wird. Taskausgabedateien sind eine bequeme Möglichkeit, Protokolldateien in Azure Storage zu speichern. Weitere Informationen finden Sie unter Beibehalten von Taskdateien mithilfe der Batch-Dienst-API in Azure Storage.
Bei jedem Dateiupload schreibt Azure Batch zwei Protokolldateien in den Computeknoten: fileuploadout.txt und fileuploaderr.txt. Sie können diese Protokolldateien überprüfen, um weitere Informationen zu einem bestimmten Fehler zu erhalten. Wenn nie versucht wurde, die Datei hochzuladen, da z. B. der Task selbst nicht ausgeführt werden konnte, sind diese Protokolldateien nicht vorhanden.
Nächste Schritte
- Erfahren Sie mehr über Azure Batch-Aufträge und -Tasks sowie Auftragsvorbereitung und Freigabetasks.
- Weitere Informationen zu Azure Batch-Pool- und Knotenfehlern.