En este documento se describe cómo limitar los tiempos de ejecución de tareas y elementos ejecutables configurando tiempos de espera. Si quieres que un runnable finalice en cuanto lo hagan todos los demás runnable de su tarea, usa un runnable en segundo plano.
Un tiempo de espera especifica el tiempo que se permite que se ejecute una tarea o un elemento ejecutable. Batch no permite que los trabajos se ejecuten durante más de 14 días y no establece tiempos de espera predeterminados para tareas y ejecutables individuales. Por lo tanto, una tarea o un elemento ejecutable pueden ejecutarse durante un máximo de 14 días antes de que se produzca un error automático. Sin embargo, si tus tareas y ejecutables no están diseñados para ejecutarse durante tanto tiempo, esta configuración puede provocar costes y retrasos inesperados. Para evitar tiempos de ejecución excesivos, puedes definir tiempos de espera para las tareas y los elementos ejecutables.
Antes de empezar
- Si no has usado Batch antes, consulta el artículo Empezar a usar Batch y habilita Batch completando los requisitos previos para proyectos y usuarios.
-
Para obtener los permisos que necesitas para crear un trabajo, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos:
-
Editor de trabajos por lotes (
roles/batch.jobsEditor
) en el proyecto -
Usuario de cuenta de servicio (
roles/iam.serviceAccountUser
) en la cuenta de servicio del trabajo, que de forma predeterminada es la cuenta de servicio predeterminada de Compute Engine
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
-
Editor de trabajos por lotes (
Definir tiempos de espera
Puedes definir tiempos de espera para elementos ejecutables, tareas o ambos. El tiempo de espera de un elemento ejecutable especifica el tiempo de ejecución máximo de ese elemento. El tiempo de espera de una tarea especifica el tiempo máximo de ejecución de esa tarea, que es la suma de todos los tiempos de ejecución individuales de sus elementos ejecutables. Por ejemplo, si una tarea tiene 3 elementos ejecutables que se ejecutan al mismo tiempo durante 1 minuto, el tiempo de ejecución de la tarea es de 3 minutos, no de 1 minuto.
Si defines tiempos de espera que se solapan (por ejemplo, un tiempo de espera para un elemento ejecutable y otro para la tarea del elemento ejecutable), solo se debe superar uno de ellos para que se produzca un fallo automático. Por ejemplo, supongamos que define el tiempo de espera de una tarea en 60 segundos y el tiempo de espera de cada uno de los elementos ejecutables de esa tarea en 120 segundos. En ese caso, esta tarea de ejemplo y todos sus elementos ejecutables fallarán cuando la suma de los tiempos de ejecución de sus elementos ejecutables supere los 60 segundos, y será imposible activar los tiempos de espera de 120 segundos.
Para elegir el tiempo de espera adecuado para las tareas y los elementos ejecutables de tu trabajo, analiza los registros de trabajos similares que hayas ejecutado anteriormente para determinar el tiempo de ejecución habitual de las tareas y los elementos ejecutables de cargas de trabajo similares.
Definir el tiempo de espera de una tarea
Usa la CLI de Google Cloud o la API REST para crear un trabajo que incluya el campo maxRunDuration
en el objeto taskSpec
del archivo JSON:
{
"taskGroups": [
{
"taskSpec": {
...
"maxRunDuration": "TIMEOUT"
}
}
]
}
Sustituye TIMEOUT
por el número máximo de segundos o fracciones de segundo que quieras permitir que se ejecute la tarea. Por ejemplo, 255s
.
Una tarea que establece un tiempo de espera de 255 segundos para una tarea tendría un archivo de configuración JSON similar al siguiente:
{
"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 se supera el tiempo de espera de una tarea, esta falla automáticamente y el tiempo de espera superado se indica con el código de salida 50005
en los eventos de estado y los registros del trabajo. Para obtener más información sobre los tiempos de espera superados, consulta la documentación de solución de problemas del código de salida 50005.
Definir el tiempo de espera de un elemento ejecutable
Usa la CLI de Google Cloud o la API REST para crear un trabajo que incluya el campo timeout
en el objeto runnable
del archivo JSON:
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
...
"timeout": "TIMEOUT"
}
]
}
}
]
}
Sustituye TIMEOUT
por el número máximo de segundos o
secciones fraccionarias que quieras permitir que se ejecute el elemento ejecutable. Por ejemplo, 3.5s
.
Un trabajo que establece un tiempo de espera de 3,5 segundos para un elemento ejecutable tendría un archivo de configuración JSON similar al siguiente:
{
"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 se supera el tiempo de espera de un elemento ejecutable, este falla automáticamente y el tiempo de espera superado se indica con el código de salida 50005
en los eventos de estado y los registros del trabajo. Para obtener más información sobre los tiempos de espera superados, consulta la documentación de solución de problemas del código de salida 50005.
Siguientes pasos
- Si tienes problemas para crear o ejecutar un trabajo, consulta la sección Solución de problemas.
- Ver trabajos y tareas.
- Consulta más información sobre las opciones de creación de trabajos.
- Consulta cómo analizar un trabajo mediante registros.