Menu

מחולל ביטויי Cron

לבנות, לפענח ולהציג לוחות זמנים של cron עם מועדי ההרצה הבאים.

מאת Nethanel Bar, Co-founder & CEO

עודכן לאחרונה

מוכנים ללמוד תכנות באמת?

ב-Coddy לומדים דרך כתיבת קוד אמיתי בדפדפן: שיעורים אינטראקטיביים, משוב מיידי ועזרה מ-AI כשנתקעים.

מה זה ביטוי cron?

ביטוי cron הוא דרך תמציתית לתאר לוח זמנים חוזר. זה אותו תחביר שמשמש את cron של Unix, מתזמן המשימות המקורי של Linux, והוא התפשט כמעט לכל מריץ משימות שתפגשו: Kubernetes CronJobs, תזמונים ב-GitHub Actions, AWS EventBridge, Cloudflare Workers, Vercel cron ורוב פלטפורמות ה-CI/CD.

הפורמט נראה מאיים אבל הוא בעצם רק חמישה שדות מופרדים ברווחים: דקה, שעה, יום בחודש, חודש, יום בשבוע. כל שדה הוא מספר, רשימה (1,15), טווח (9-17), צעד (*/5) או תו כללי (*). כלי cron טוב הופך את הביטוי לשפה פשוטה ומציג את זמני ההפעלה הבאים, כדי שתוכלו לוודא אותו לפני פריסה.

חלק מהפלטפורמות מרחיבות את התחביר הבסיסי של 5 שדות עם שדה *שניות* בהתחלה (Quartz, Spring, Kubernetes בגרסת 6 שדות) או שדה *שנה* בסוף. תמיד בדקו איזה פורמט המתזמן שלכם מקבל לפני שמדביקים ביטוי.

מה תלמדו תוך כדי בניית תזמוני cron

  • לביטוי cron סטנדרטי יש 5 שדות: דקה, שעה, יום בחודש, חודש, יום בשבוע.
  • * פירושו "כל ערך" בשדה הזה: זו הסיבה הנפוצה ביותר לכך שתזמון מופעל יותר פעמים מהצפוי.
  • */N פירושו "כל N יחידות": */5 בשדה הדקות הוא "כל 5 דקות".
  • יום בחודש ויום בשבוע משפיעים זה על זה: קביעת שניהם מצמצמת את התזמון, אבל ב-cron הקלאסי של Unix, קביעת אחד מהם ל-* כשהשני ספציפי היא הדרך הבטוחה יותר לבטא כללים של ימי חול בלבד או פעם בחודש בלבד.

איך לכתוב ביטוי cron צעד אחר צעד

  1. התחילו מתבנית

    בחרו תבנית שקרובה למה שאתם רוצים: כל דקה, כל שעה, כל יום ב-9:00, ימי חול ב-9:00, חודשי. הביטוי מופיע בעורך.

  2. התאימו כל שדה

    ערכו דקה, שעה, יום בחודש, חודש, יום בשבוע. השתמשו ב-* לכל ערך, ברשימות מופרדות בפסיקים, בטווחים (9-17) או בצעדים (*/15).

  3. קראו את ההסבר בשפה פשוטה

    הכלי הופך את הביטוי שלכם למשפט (ב-09:00 בכל יום חול). אם המשפט לא תואם את מה שרציתם, הביטוי שגוי.

  4. צפו מראש בהפעלות הבאות

    ודאו את 5 עד 10 זמני ההרצה הבאים באזור הזמן המקומי שלכם. שימו לב למעברי שעון קיץ אם התזמון קרוב לשינוי.

  5. העתיקו למתזמן שלכם

    הכניסו את הביטוי ל-crontab, ל-workflow של GitHub Actions, ל-CronJob של Kubernetes או לכל מתזמן אחר שאתם משתמשים בו.

מדריך מהיר לשדות cron

חמשת השדות של ביטוי cron סטנדרטי, לפי הסדר. מקור: דף ה-man של crontab(5) לפי POSIX.

מיקוםשדהטווחתווים מיוחדים
1דקה0 עד 59* , - /
2שעה0 עד 23* , - /
3יום בחודש1 עד 31* , - / ? (בחלק מהניבים)
4חודש1 עד 12 או JAN עד DEC* , - /
5יום בשבוע0 עד 6 (ראשון=0) או SUN עד SAT* , - /

דוגמאות לביטויי cron לנסות

כל 5 דקות

ביטוי

*/5 * * * *

נקרא כך

כל 5 דקות: בתחילת השעה וכל 5 דקות אחר כך.

ערכי צעד (*/5) הם הדרך הקלה ביותר לבטא "כל N" בלי לפרט כל מספר. נפוץ לבדיקות תקינות ולמשימות polling.

ימי חול ב-9 בבוקר

ביטוי

0 9 * * 1-5

נקרא כך

ב-09:00 בכל יום משני עד שישי.

טווח הימים בשבוע 1-5 פירושו שני עד שישי. השתמשו בזה לתזכורות בשעות העבודה ולסיכומים בימי חול בלבד.

היום הראשון בכל חודש בחצות

ביטוי

0 0 1 * *

נקרא כך

ב-00:00 ביום 1 בכל חודש.

יום בחודש 1 ועוד * בכל שדה אחר נותנים משימה חודשית אמיתית. נפוץ לחיוב, לדוחות ולמשימות רוטציה.

פעמיים בשעה, בשעות העבודה, בימי חול

ביטוי

0,30 9-17 * * 1-5

נקרא כך

בדקה 0 ובדקה 30 בין 09:00 ל-17:00, משני עד שישי.

רשימה מופרדת בפסיקים (0,30) ועוד טווח (9-17) ועוד ימי חול. זה סוג התזמון שמשמש לרענון BI או לריקון תור שחשוב רק בשעות העבודה.

טעויות cron נפוצות

  • לשכוח את אזור הזמן. רוב שירותי ה-cron מופעלים לפי אזור הזמן של *השרת*, לא שלכם. קבעו את אזור הזמן במפורש כשהפלטפורמה תומכת בזה.
  • לקבוע גם יום בחודש וגם יום בשבוע. ב-cron הקלאסי של Unix, התזמון מופעל ביום שתואם *אחד מהם*, וזה מפתיע את רוב האנשים בפעם הראשונה.
  • להשתמש ב-*/45 ולצפות שיופעל כל 45 דקות. ערכי צעד מחושבים מ-0, כך ש-*/45 מופעל ב-0 וב-45, לא במרווח אמיתי של 45 דקות.
  • לא לצפות מראש בהפעלות הבאות לפני פריסה. ביטוי cron שכמעט נכון יכול להיות מופעל פי 60 יותר מהמתוכנן.
  • לשכוח מעברי שעון קיץ. תזמון של 0 2 * * * עשוי לרוץ פעמיים ביום שבו השעון חוזר אחורה, ולא לרוץ בכלל כשהוא מתקדם.

שאלות נפוצות על ביטויי cron

איך כותבים ביטוי cron?
לביטוי cron סטנדרטי יש חמישה שדות מופרדים ברווחים: דקה, שעה, יום בחודש, חודש, יום בשבוע. השתמשו ב-* ל*כל ערך*, במספר לערך מדויק, ברשימה מופרדת בפסיקים (1,15), בטווח (9-17) או בצעד (*/5).
מה המשמעות של */5 * * * *?
זה אומר "כל 5 דקות". ה-*/5 בשדה הדקות מופעל בדקה 0 וכל 5 דקות אחר כך, 0, 5, 10, 15, …, 55, וה-* בכל שדה אחר אומר שהוא מופעל כל שעה, כל יום, כל חודש, בכל יום בשבוע.
באיזה אזור זמן cron משתמש?
כברירת מחדל, cron משתמש באזור הזמן של המערכת שבה הוא רץ. רוב המתזמנים בענן מאפשרים לקבוע אזור זמן במפורש (TZ=Europe/Berlin, ביטויי תזמון של AWS וכו'). במקרה של ספק, שמרו תזמונים ב-UTC.
ביטוי cron יכול לרוץ כל שנייה?
ב-cron סטנדרטי של 5 שדות היחידה הקטנה ביותר היא דקה, כך שהרזולוציה הגבוהה ביותר היא כל דקה. Quartz cron, Spring cron וחלק מגרסאות Kubernetes מוסיפים שדה *שניות* שישי לתזמונים של פחות מדקה.
מה ההבדל בין 0 0 * * 0 לבין 0 0 * * 7?
שניהם מתארים יום ראשון בחצות. היום בשבוע הוא 0 עד 6 (ראשון עד שבת) ברוב המימושים של cron, אבל גם 7 מתקבל כיום ראשון לצורך תאימות עם חלק מהניבים.

למידע נוסף

כלי פיתוח נוספים

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל