אירועים חוזרים מתוזמנים להתחלה

יש שלושה סימנים שונים לתחילת פעולות אוטומטיות שמאפשרים לתזמן מראש פעולה אוטומטית:

  1. Time.ScheduledTimeEvent
  2. Time.RecurringClockTimeScheduledEvent
  3. Time.RecurringSolarTimeScheduledEvent

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

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

starter<_>(structure, Time.ScheduledTimeEvent) {
  parameter(Time.ScheduledTimeEvent.clockTime(LocalTime.of(22, 0, 0, 0)))
}

אפשר גם לציין אירוע לפי זמן השמש במקום לפי השעה. הפרמטר של סוג הסימן הזה לתחילת פעולה הוא SolarTimeStruct שכולל:

  1. type, שהוא SolarTimeType.Sunrise או SolarTimeType.Sunset.
  2. offset, שמאפשרת להזיז את שעת ההתחלה ביחס לאירוע הסולארי בכל פרק זמן. ערכים חיוביים גורמים לעיכוב של אחרי האירוע הסולארי, וערכים שליליים גורמים להפעלת התהליך לפני האירוע הסולארי.

בדוגמה הבאה מוצג starter שמתחיל את האוטומציה 15 דקות לפני הזריחה בכל יום:

starter<_>(structure, Time.ScheduledTimeEvent) {
  parameter(
    Time.ScheduledTimeEvent.solarTime(
      SolarTimeStruct(SolarTimeType.Sunrise, java.time.Duration.ofMinutes(-15))
    )
  )
}

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

Time.RecurringClockTimeScheduledEvent מאפשרת לתזמן פעולה אוטומטית על סמך תנאי זמן או תאריך אחד או יותר. התבנית הזו משתמשת בתחביר שדומה לזה שמשמש את כלי השירות של Unix cronכדי לציין את לוח הזמנים של אוטומציה חוזרת.

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

cron ביטויים

יכול להיות שאתם כבר מכירים את cron, פקודה שמשמשת במערכות Unix ו-Linux לתזמון משימות חוזרות.

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

יש כמה 'טעמים' שונים של cron, וכמה וריאציות של תחביר ביישומים האלה. ביטויים של סימן לתחילת פעולה של אירוע מתוזמן חוזר cron משתמשים באותו תחביר כמו Quartz scheduler. התחביר של ביטויי Quartz cron מוסבר בתיעוד של Quartz CronExpression.

דוגמאות

ריכזנו כאן כמה דוגמאות להמחשה.

תרחיש לדוגמה שנייה דקה שעה היום בחודש חודש יום בשבוע שנה
הפעלה כל 24 שעות, בחצות 0 0 0 ? * * *
הפעלה בשעה 6:00 בכל יום שלישי 0 30 19 ? * 3 *
הפעלה כל שעה, ברבע לשעה, במהלך חודש פברואר 0 15 * ? 2 * *
הפעלה פעם בשעה 0 0 * ? * * *
הפעלה כל 24 שעות, בחצות, מינואר עד מרץ, ביום החול הקרוב ביותר ל-1 בחודש 0 0 0 ? 1-3 1W *
ביום חמישי השני של פברואר, פעם בשעה, ברבע לשעה 0 15 * ? 2 5#2 *
הפעלה ברבע שעה אחרי כל שעה, ביום האחרון בחודש של פברואר 0 15 * L 2 ? *
הפעלה בשעה 6:00 בבוקר בכל יום שלישי וחמישי 0 30 19 ? * 3,5 *

RecurringClockTimeScheduledEvent

ב-RecurringClockTimeScheduledEvent starter, מחרוזת הביטוי cron מוקצית לשדה Time.RecurringClockTimeScheduledEvent.cronExpression.

הנה דוגמה לRecurringClockTimeScheduledEvent starter שמתחיל את האוטומציה בשעה 20:00, בכל יום רביעי בחודש אפריל:

starter<_>(structure, event = Time.RecurringClockTimeScheduledEvent) {
  parameter(Time.RecurringClockTimeScheduledEvent.cronExpression("0 0 20 ? 4 4 *"))
}

RecurringSolarTimeScheduleEvent

הבלוק RecurringSolarTimeScheduleEvent כולל שני פרמטרים:

  1. SolarTimeStruct.
  2. cronExpression: קבוצת משנה של ביטוי cron שכוללת רק את השדות Day-of-Month,‏ Month,‏ Day-of-Week ו-Year. השעה הסולארית קובעת את השעה המדויקת שבה תתחיל האוטומציה, ולכן השדות 'שנייה', 'דקה' ו'שעה' מושמטים.

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

starter<_>(structure, event = Time.RecurringSolarTimeScheduledEvent) {
  parameter(
    Time.RecurringSolarTimeScheduledEvent.solarTime(
      TimeTrait.SolarTimeStruct(SolarTimeType.Sunrise, Duration.ofHours(1))
    )
  )
  parameter(Time.RecurringSolarTimeScheduledEvent.cronExpression("? 4 4 *"))
}