הגבלת זמני ריצה של משימות ורכיבים שניתנים להרצה באמצעות פסק זמן

במאמר הזה מוסבר איך להגביל את משך ההרצה של משימות ושל קבצים שניתנים להרצה באמצעות הגדרת פסק זמן (timeout). לחלופין, אם רוצים שרכיב runnable יסתיים ברגע שכל רכיב runnable אחר במשימה שלו יסיים את הריצה, אפשר להשתמש במקום זאת ברכיב runnable ברקע.

זמן קצוב לתפוגה מציין את משך הזמן שבו מותר להריץ משימה או קובץ הפעלה. בדרך כלל, ב-Batch אי אפשר להריץ משימות יותר מ-14 ימים, ולא מוגדרים פסק זמן (timeout) כברירת מחדל למשימות ולרכיבים להרצה. לכן, בדרך כלל אפשר להריץ משימה או קובץ הפעלה במשך 14 ימים לפני שהם נכשלים באופן אוטומטי. אבל אם המשימות והקבצים להרצה לא אמורים לפעול כל כך הרבה זמן, יכול להיות שההגדרה הזו תגרום לעלויות בלתי צפויות ולעיכובים. כדי למנוע זמני ריצה ארוכים מדי, אפשר להגדיר פסק זמן למשימות ולרכיבים שניתנים להרצה.

לפני שמתחילים

  1. אם עוד לא השתמשתם ב-Batch, כדאי לעיין במאמר תחילת העבודה עם Batch ולהפעיל את Batch על ידי השלמת הדרישות המוקדמות לפרויקטים ולמשתמשים.
  2. כדי לקבל את ההרשאות שדרושות ליצירת משימה, אתם צריכים לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:

    להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

    יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.

הגדרת זמני קצוב לתפוגה

אפשר להגדיר פסק זמן להפעלה של קבצים, למשימות או לשניהם. הזמן הקצוב לתפוגה של קובץ הפעלה מציין את זמן הריצה המקסימלי של קובץ ההפעלה הזה. הזמן הקצוב לתפוגה של משימה מציין את זמן הריצה המקסימלי של המשימה, שהוא סכום כל זמני הריצה הנפרדים של הרכיבים הניתנים להרצה שלה. לדוגמה, אם למשימה יש 3 רכיבים שניתנים להרצה וכולם פועלים בו-זמנית במשך דקה אחת, זמן הריצה של המשימה הוא 3 דקות, ולא דקה אחת.

אם מגדירים זמנים קצובים לתפוגה חופפים – למשל, זמן קצוב לתפוגה גם להפעלה וגם למשימה של ההפעלה – צריך לחכות רק עד שזמן קצוב לתפוגה אחד יסתיים כדי שהמערכת תפעיל כשל אוטומטי. לדוגמה, נניח שהגדרתם את זמן הקצוב לתפוגה של משימה ל-60 שניות, ואת זמן הקצוב לתפוגה של כל אחד מהרכיבים הניתנים להרצה של המשימה ל-120 שניות. לאחר מכן, המשימה לדוגמה הזו וכל הרכיבים שלה נכשלים כשהסכום של זמני הריצה של הרכיבים שלה חורג מ-60 שניות, ואי אפשר להפעיל את פסק הזמן של 120 שניות.

כדי לבחור את הזמן המתאים להמתנה עד לביצוע פעולה (timeout) שיוגדר למשימות ולרכיבים הניתנים להרצה בעבודה, מנתחים את היומנים של עבודות דומות שהרצתם בעבר כדי לקבוע את זמן הריצה האופייני למשימות ולרכיבים הניתנים להרצה עבור עומסי עבודה דומים.

הגדרת פסק זמן למשימה

משתמשים ב-Google Cloud CLI או ב-API בארכיטקטורת REST כדי ליצור משימה שכוללת את השדה maxRunDuration באובייקט taskSpec של קובץ ה-JSON:

{
    "taskGroups": [
      {
        "taskSpec": {
          ...
          "maxRunDuration": "TIMEOUT"
        }
      }
    ]
}

מחליפים את TIMEOUT במספר השניות המקסימלי או בחלקים של שניות שרוצים לאפשר להריץ את המשימה. לדוגמה, 255s.

קובץ תצורה בפורמט JSON של משימה עם הגדרת זמן קצוב לתפוגה של 255 שניות ייראה כך:

{
    "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"
    }
}

אם חלף הזמן הקצוב לתפוגה עבור משימה, המשימה נכשלת באופן אוטומטי וחלף הזמן הקצוב לתפוגה מצוין על ידי קוד היציאה 50005 ביומנים ובאירועי הסטטוס של העבודה. מידע נוסף על חריגה מזמני קצובים זמין במאמרי העזרה בנושא פתרון בעיות של קוד יציאה 50005.

הגדרת זמן קצוב לתפוגה של רכיב הפעלה

משתמשים ב-Google Cloud CLI או ב-API בארכיטקטורת REST כדי ליצור משימה שכוללת את השדה timeout באובייקט runnable של קובץ ה-JSON:

{
    "taskGroups": [
      {
        "taskSpec": {
          "runnables": [
            {
              ...
              "timeout": "TIMEOUT"
            }
          ]
        }
      }
    ]
}

מחליפים את TIMEOUT במספר השניות המקסימלי או בחלקים השבריים שרוצים לאפשר להפעלה לרוץ. לדוגמה, 3.5s.

משימה שמגדירה זמן קצוב לתפוגה של 3.5 שניות להפעלה תכלול קובץ תצורה בפורמט JSON שדומה לזה:

{
    "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"
    }
}

אם חלף הזמן הקצוב לתהליך הפעלה, התהליך נכשל באופן אוטומטי וחלף הזמן הקצוב מצוין על ידי קוד יציאה 50005 ביומנים ובאירועי הסטטוס של העבודה. מידע נוסף על חריגה מזמני קצובים זמין במאמרי העזרה בנושא פתרון בעיות של קוד יציאה 50005.

המאמרים הבאים