Ce document explique comment limiter la durée d'exécution des tâches et des exécutables en définissant des délais d'attente. Sinon, si vous souhaitez qu'un exécutable se termine dès que tous les autres exécutables de sa tâche ont fini de s'exécuter, utilisez plutôt un exécutable en arrière-plan.
Un délai avant expiration spécifie la durée d'exécution autorisée d'une tâche ou d'un exécutable. Batch ne permet pas aux jobs de s'exécuter pendant plus de 14 jours et ne définit pas de délais d'attente par défaut pour les tâches et les exécutables individuels. Par conséquent, une tâche ou un exécutable individuel peut s'exécuter pendant 14 jours maximum avant d'échouer automatiquement. Toutefois, si vos tâches et vos exécutables ne sont pas censés s'exécuter aussi longtemps, cette configuration peut entraîner des coûts et des retards inattendus. Pour éviter des durées d'exécution excessives, vous pouvez définir des délais avant expiration pour les tâches et les exécutables.
Avant de commencer
- Si vous n'avez jamais utilisé Batch, consultez Premiers pas avec Batch et activez Batch en remplissant les conditions préalables pour les projets et les utilisateurs.
-
Pour obtenir les autorisations nécessaires pour créer un job, demandez à votre administrateur de vous accorder les rôles IAM suivants :
-
Éditeur de tâches par lot (
roles/batch.jobsEditor
) sur le projet -
Utilisateur du compte de service (
roles/iam.serviceAccountUser
) sur le compte de service du job, qui par défaut est le compte de service Compute Engine par défaut
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.
-
Éditeur de tâches par lot (
Définir les délais avant expiration
Vous pouvez définir des délais avant expiration pour les exécutables, les tâches ou les deux. Le délai d'inactivité d'un exécutable spécifie la durée d'exécution maximale de cet exécutable. Le délai avant expiration d'une tâche spécifie la durée d'exécution maximale de cette tâche, qui correspond à la somme de toutes les durées d'exécution individuelles de ses exécutables. Par exemple, si une tâche comporte trois exécutables qui s'exécutent tous en même temps pendant une minute, la durée d'exécution de la tâche est de trois minutes, et non d'une minute.
Si vous définissez des délais qui se chevauchent (par exemple, un délai pour un exécutable et la tâche de l'exécutable), un seul délai doit être dépassé pour déclencher un échec automatique. Par exemple, supposons que vous définissiez le délai avant expiration d'une tâche sur 60 secondes et celui de chacun des exécutables de cette tâche sur 120 secondes. Ensuite, cet exemple de tâche et tous ses exécutables échouent lorsque la somme des durées d'exécution de ses exécutables dépasse 60 secondes, et il est impossible de déclencher les délais avant expiration de 120 secondes.
Pour choisir le délai d'attente approprié à définir pour les tâches et les exécutables de votre job, analysez les journaux des jobs similaires que vous avez exécutés précédemment afin de déterminer la durée d'exécution typique des tâches et des exécutables pour des charges de travail similaires.
Définir un délai avant expiration pour une tâche
Utilisez Google Cloud CLI ou l'API REST pour créer un job incluant le champ maxRunDuration
dans l'objet taskSpec
du fichier JSON :
{
"taskGroups": [
{
"taskSpec": {
...
"maxRunDuration": "TIMEOUT"
}
}
]
}
Remplacez TIMEOUT
par le nombre maximal de secondes ou de sections fractionnaires pendant lesquelles vous souhaitez autoriser l'exécution de la tâche. Exemple :255s
Une tâche qui définit un délai avant expiration de 255 secondes pour une tâche aurait un fichier de configuration JSON semblable à ce qui suit :
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
}
}
],
"maxRunDuration": "255s"
},
"taskCount": 3
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
Si le délai d'une tâche est dépassé, elle échoue automatiquement. Le code d'erreur 50005
indique que le délai a été dépassé dans les événements d'état et les journaux du job. Pour en savoir plus sur les délais dépassés, consultez la documentation de dépannage pour le code d'erreur 50005.
Définir un délai avant expiration pour un exécutable
Utilisez Google Cloud CLI ou l'API REST pour créer un job incluant le champ timeout
dans l'objet runnable
du fichier JSON :
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
...
"timeout": "TIMEOUT"
}
]
}
}
]
}
Remplacez TIMEOUT
par le nombre maximal de secondes ou de sections fractionnaires pendant lesquelles vous souhaitez autoriser l'exécution du fichier exécutable. Exemple : 3.5s
.
Un job qui définit un délai avant expiration de 3,5 secondes pour un exécutable aurait un fichier de configuration JSON semblable à ce qui suit :
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
},
"timeout": "3.5s"
}
]
},
"taskCount": 3
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
Si le délai d'exécution d'un exécutable est dépassé, l'exécutable échoue automatiquement. Le dépassement du délai est indiqué par le code de sortie 50005
dans les événements d'état et les journaux du job. Pour en savoir plus sur les délais dépassés, consultez la documentation de dépannage pour le code d'erreur 50005.
Étapes suivantes
- Si vous rencontrez des problèmes pour créer ou exécuter un job, consultez la section Dépannage.
- Afficher les jobs et les tâches
- Découvrez d'autres options de création de tâches.
- Découvrez comment analyser un job à l'aide des journaux.