פורמט של משימת Cron ואזור זמן

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

‫Cloud Scheduler תומך גם בתזמון משימות באמצעות פורמט קריא יותר. מידע נוסף זמין במאמר בנושא פורמט חלופי של משימות.

פורמט של משימת cron

אפשר להשתמש במסוף Google Cloud , ב-Google Cloud CLI או ב-API בארכיטקטורת REST של Cloud Scheduler כדי להגדיר את לוח הזמנים.

לוח זמנים מוגדר באמצעות פורמט המחרוזת unix-cron ‏ (* * * * *), שהוא קבוצה של חמישה שדות בשורה שמציינים מתי העבודה צריכה להתבצע.

שדות הזמן הם בפורמט הבא, והערכים האפשריים שלהם הם אלה, והם חייבים להופיע בסדר הזה:

|------------------------------- Minute (0-59)
|     |------------------------- Hour (0-23)
|     |     |------------------- Day of the month (1-31)
|     |     |     |------------- Month (1-12; or JAN to DEC)
|     |     |     |     |------- Day of the week (0-6; or SUN to SAT; or 7 for Sunday)
|     |     |     |     |
|     |     |     |     |
*     *     *     *     *
שדה הפורמט של הערכים האפשריים
דקה 0-59
שעה 0-23
יום בחודש 1-31
חודש ‫1-12 (או JAN עד DEC)
היום בשבוע ‫0-6 (או SUN עד SAT; או 7 ליום ראשון)
  • ‫Minute: מציין כמה דקות אחרי תחילת השעה המשימה מופעלת. לדוגמה, אם הדקה מוגדרת ל-0, העבודה תופעל בתחילת השעה (כי זה 0 דקות אחרי השעה). לכן, אם השעה היא 8:00 בבוקר, העבודה תפעל ב-8:00 בבוקר.

  • שעה: מציין כמה שעות עברו מאז חצות עד להרצת העבודה (מעוגל כלפי מטה לשעה הקרובה ביותר, כי הדקות שנותרו מצוינות בשדה minute). חצות זה 0 וצהריים זה 12. לדוגמה, אם השעה מוגדרת ל-0, העבודה תפעל בשעת חצות (כי זה 0 שעות אחרי חצות).

  • היום בחודש: מציין את התאריך הקלנדרי של החודש. לדוגמה, 1 ליום הראשון בחודש. ‫Cloud Scheduler לא תומך ב-L כציון של היום האחרון בחודש.

  • חודש: מציין את החודש. מציינים את מספר החודש או את שלוש האותיות הראשונות של שם החודש באותיות רישיות. לדוגמה, 1 לינואר, או JAN.

  • יום בשבוע: מציין את היום בשבוע. לדוגמה, יום שני הוא 1 ויום שלישי הוא 2. אפשר לציין את יום ראשון באמצעות 0 או 7. מציינים את היום בשבוע באמצעות מספר או שלוש האותיות הראשונות של שם היום בשבוע באותיות רישיות (לדוגמה, SUN ליום ראשון).

    • השדה הזה מוערך כOR כולל עם השדה day of the month, אלא אם אחד מהשדות האלה מסומן כלא מוגבל בכוכבית (*). לדוגמה, אם היום בחודש מוגדר כ-1 והיום בשבוע מוגדר כ-SAT, העבודה מופעלת ביום הראשון של החודש וגם בכל יום שבת בחודש, גם אם היום הראשון בחודש הוא לא יום שבת. אם יום השבוע לא מוגבל (הוגדר ל-*), העבודה תפעל רק ביום הראשון של החודש.

התאמה לכל הערכים

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

הנה שתי דוגמאות שבהן השדה של הדקות לא מוגבל:

  • ‫* 0 1 1 1: המשימה מופעלת כל דקה בשעה חצות ב-1 בינואר ובכל יום שני.
  • ‫* * * * *: העבודה מופעלת כל דקה (בכל שעה, בכל יום בחודש, בכל חודש, בכל יום בשבוע, כי כל אחד מהשדות האלה לא מוגבל).

הכוכבית שקולה למקרה מיוחד של טווח, שבו הטווח מתחיל בערך התקין הראשון בשדה ומסתיים בערך התקין האחרון בשדה (לדוגמה, 0-59 בשדה של הדקה).

התאמה של טווח

כדי להתאים טווח של ערכים, מציינים את ערכי ההתחלה והסיום ומפרידים ביניהם במקף (-). לא כוללים רווחים בטווח. הטווחים כוללים את הקצוות. המספר הראשון צריך להיות קטן מהמספר השני. אם משתמשים בשמות מקוצרים של החודש או היום בשבוע (לדוגמה, JAN במקום 1 לחודש הראשון בשנה), הערך הראשון צריך להיות מוקדם יותר בחודש או בשבוע מהערך השני.

הדוגמאות הבאות שוות ערך ופועלות בחצות בימי שני, שלישי, רביעי, חמישי ושישי (בכל החודשים):

  • 0 0 * * 1-5
  • 0 0 * * MON-FRI

התאמה לרשימה

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

דוגמאות:

  • ‫0 0,12 * * *: המשימה מופעלת בחצות ובצהריים.
  • ‫0-5,30-35 * * * *: העבודה מופעלת בכל אחת מחמש הדקות הראשונות של כל חצי שעה (בתחילת השעה ובחצי השעה).

דילוג על ערכים בטווח

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

אפשר להשתמש בכוכבית (*) כדי לציין את טווח כל הערכים של השדה. כשמשתמשים בכוכבית, הערך הראשון בטווח הוא: 0 בשדות של דקה, שעה ויום בשבוע (יום ראשון), ו-1 בשדות של יום בחודש וחודש.

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

דוגמאות לטווחים שמשתמשים בפונקציות של צעד:

  • ‫*/2: זו פונקציית מדרגות תקפה לכל שדה. בשדה של הדקה, הערך צריך להיות 0, 2, 4, ... , 58. לשעה, הערך תואם ל-0, 2, 4, ... , 22. לגבי היום בחודש, הוא תואם ל-1, 3, 5, ... , 31 (בחודש עם 31 ימים). הערך החודשי צריך להיות 1, 3, 5, ... , 11. לגבי היום בשבוע, התנאי הוא 0, 2, 4 או 6.

  • ‫0-12/2: זו פונקציית צעד תקינה לשדות של הדקה והשעה. הוא תואם ל-0, 2, 4, ... , 12.

דוגמאות ללוחות זמנים שמשתמשים בפונקציות של צעד:

  • ‫*/2 * * * *: העבודה מורצת כל שתי דקות.

  • ‫0 0-12/2 * * *: המשימה מופעלת כל שעתיים, בשעה עגולה. ההרצה הראשונה היא בחצות. ההרצה האחרונה היא בצהריים.

לוחות זמנים לדוגמה

בטבלה הבאה מוצגות דוגמאות ללוחות זמנים של משימות cron ותיאור שלהן:

תזמון פורמט של משימת cron הסבר
כל דקה * * * * * פועל מדי דקה. לדוגמה, 9:00, 9:01, 9:02 וכן הלאה.
כל שעה 0 * * * * פועל מדי שעה. לדוגמה, 9:00,‏ 10:00,‏ 11:00 וכן הלאה.
כל יום 0 0 * * * הפעולה מתבצעת בכל יום בשעה 00:00 (בפורמט של 24 שעות).
כל יום חול
(ראשון-חמישי)
הביטויים הבאים שקולים:
  • 0 0 * * 1-5
  • 0 0 * * MON-FRI
הכלל מופעל בשעה 00:00 (בפורמט של 24 שעות) בימי שני, שלישי, רביעי, חמישי ושישי.
בכל שבוע הביטויים הבאים שקולים:
  • 0 0 * * 0
  • 0 0 * * 7
  • 0 0 * * SUN
הכלל יפעל בימי ראשון בשעה 00:00 (בפורמט של 24 שעות).
מדי חודש 0 0 1 * * התשלום מתבצע בחצות (00:00 בפורמט של 24 שעות) ביום הראשון של החודש.
כל רבעון הביטויים הבאים שקולים:
  • 0 0 1 1,4,7,10 *
  • 0 0 1 JAN,APR,JUL,OCT *
הפעולה מתבצעת בחצות (00:00 בפורמט של 24 שעות) ביום הראשון של הרבעון, לפי לוח זמנים רבעוני רגיל: 1 בינואר, 1 באפריל, 1 ביולי ו-1 באוקטובר.
מדי שנה הביטויים הבאים שקולים:
  • 0 0 1 1 *
  • 0 0 1 JAN *
הפעולה מתבצעת בחצות (00:00 בפורמט של 24 שעות) ביום הראשון של החודש הראשון בשנה (1 בינואר).

אזור זמן

אפשר לבחור את אזור הזמן להערכת לוח הזמנים במסוףGoogle Cloud (בדף Create a job, בוחרים Timezone מהרשימה) או באמצעות הדגל gcloud --time-zone כשיוצרים את העבודה.

הערך בשדה הזה צריך להיות קיצור של אזור הזמן שמשמש במסד הנתונים tz. אזור הזמן שמוגדר כברירת מחדל הוא UTC.

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

אם העבודה שלכם דורשת קצב מאוד ספציפי, כדאי לבחור אזור זמן שלא חל בו שעון קיץ. מומלץ להשתמש ב-UTC ב-Cloud Scheduler כדי למנוע את הבעיה לחלוטין.

פורמט חלופי של משימות

אתם יכולים להשתמש בפורמט קריא יותר של הגדרת זמן שנקרא groc, שמהווה חלופה לביטויי cron.

שימו לב: כשמציינים תזמון של משימה באמצעות groc, צריך להשתמש ב-gcloud CLI או לשלוח בקשה ישירות אל Cloud Scheduler API.

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

03 of month 12:34
1,3,4,7,11,18,29 of jan,jul 12:34
1st friday of quarter 9:00
1st,third monday of month 04:00
2nd,3rd tue,wed,thu of feb,aug 13:50
every 336 hours
every 48 hours
every 5 minutes
every 60 minutes on mon,wed
every day 09:00
every minute
every sun,tue,thu 9:00
every wed of december 00:00
first sunday of month 12:00
second,4th tue,thursday of 3rd month of quarter 18:30

מידע נוסף על התחביר זמין במאמר בנושא הגדרת לוח הזמנים של משימת cron.

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