Ce document explique comment limiter la durée d'exécution des tâches et des exécutables en définissant des délais avant expiration.
Un délai avant expiration spécifie la durée pendant laquelle une tâche ou un exécutable est autorisé à s'exécuter. Batch n'autorise pas l'exécution des tâches pendant plus de 14 jours et ne définit pas de délai avant expiration par défaut pour les tâches individuelles et les exécutables. Par conséquent, une tâche individuelle ou un exécutable peut s'exécuter aussi longtemps que 14 jours avant l'échec automatique. Toutefois, si vos tâches et vos exécutables ne sont pas destiné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 la page 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 une tâche, demandez à votre administrateur de vous attribuer 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 est par défaut le compte de service Compute Engine par défaut
Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.
Vous pouvez également obtenir les autorisations requises via 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 avant expiration d'un exécutable spécifie sa durée maximale. 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 avant expiration qui se chevauchent, tels qu'un délai d'inactivité pour un exécutable et pour sa tâche, un seul délai d'expiration 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 le délai avant expiration 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 durée totale d'exécution de ses exécutables dépasse 60 secondes. Il est alors impossible de déclencher les délais d'inactivité de 120 secondes.
Pour choisir le délai d'expiration approprié à définir pour les tâches et les exécutables de votre tâche, analysez les journaux des tâches similaires que vous avez précédemment exécutées afin de déterminer la durée d'exécution type des tâches et des exécutables pour des charges de travail similaires.
Définir le délai d'inactivité d'une tâche
Utilisez Google Cloud CLI ou l'API REST pour créer une tâche qui inclut 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 pour 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 possède un fichier de configuration JSON semblable à celui-ci:
{
"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 avant expiration d'une tâche est dépassé, celle-ci échoue automatiquement et le délai dépassé est indiqué par le code de sortie 50005
dans les événements et les journaux d'état de la tâche. Pour en savoir plus sur les délais avant expiration dépassés, consultez la documentation de dépannage relative au code de sortie 50005.
Définir le délai avant expiration d'un exécutable
Utilisez Google Cloud CLI ou l'API REST pour créer une tâche qui inclut 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 pour lesquelles vous souhaitez autoriser l'exécution de l'exécutable. Exemple : 3.5s
.
Une tâche qui définit un délai avant expiration de 3,5 secondes pour un exécutable possède un fichier de configuration JSON semblable à celui-ci:
{
"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 avant expiration d'un exécutable est dépassé, celui-ci échoue automatiquement et le délai dépassé est indiqué par le code de sortie 50005
dans les événements et les journaux d'état de la tâche. Pour en savoir plus sur les délais avant expiration dépassés, consultez la documentation de dépannage relative au code de sortie 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
- Apprenez-en plus sur les options de création de tâches.
- Découvrez comment analyser une tâche à l'aide des journaux.