פיתוח · 3 דקות קריאה ·
ביטויי Cron בהסבר פשוט, עם 10 דוגמאות מוכנות
חמישה שדות, ארבעה סימנים ומלכודת אחת של אזורי זמן. כך קוראים וכותבים תזמוני cron, עם דוגמאות שאפשר להעתיק.

Cron הוא המתזמן שמאחורי גיבויים, דוחות ומשימות ניקוי בשרתים בכל העולם, והתחביר שלו מופיע גם ב-GitHub Actions, ב-CronJobs של Kubernetes וברוב מתזמני הענן. תזמון הוא חמישה שדות שמופרדים ברווחים.
┌ דקה (0-59)
│ ┌ שעה (0-23)
│ │ ┌ יום בחודש (1-31)
│ │ │ ┌ חודש (1-12)
│ │ │ │ ┌ יום בשבוע (0-6, 0 = ראשון)
* * * * *
ארבעה סימנים
* פירושו כל ערך. פסיק יוצר רשימה (1,15), מקף יוצר טווח (1-5) ולוכסן יוצר צעד (*/15 = כל 15 יחידות). ארבעת אלה מכסים כמעט כל תזמון.
10 דוגמאות
*/5 * * * * כל 5 דקות
0 * * * * כל שעה עגולה
0 9 * * * כל יום ב-09:00
30 2 * * * כל לילה ב-02:30
0 9 * * 1-5 בימים שני עד שישי ב-09:00
0 18 * * 5 בימי שישי ב-18:00
0 0 1 * * בחצות, ב-1 לכל חודש
0 0 1 1 * פעם בשנה, ב-1 בינואר
0 */6 * * * כל 6 שעות
15 8,12,17 * * * ב-08:15, ב-12:15 וב-17:15 כל יום
מלכודת 1: יום בחודש ויום בשבוע
כששני השדות מוגבלים, cron הקלאסי מריץ את המשימה כשאחד מהם מתאים. 0 0 1 * 1 רץ ב-1 לחודש וגם בכל יום שני, ולא רק בימי שני שנופלים על ה-1.
מלכודת 2: אזור הזמן
ל-cron אין אזור זמן משלו. המשימה רצה לפי אזור הזמן של המכונה או השירות שמריץ אותה, ולרוב זה UTC. משימה שמוגדרת 0 9 * * * בשרת UTC רצה ב-09:00 UTC, וזה יכול להיות כמה שעות לפני או אחרי השעה אצלכם, ושעון קיץ יכול להזיז אותה שוב.
מלכודת 3: הרצות חופפות והרצות שהוחמצו
Cron מפעיל משימה בזמן שנקבע בין אם ההרצה הקודמת הסתיימה ובין אם לא. גיבוי שמוגדר לרוץ כל 5 דקות ונמשך 7 דקות ירוץ בסוף פעמיים במקביל. עטפו משימות ארוכות בנעילה (ב-Linux הפקודה flock עושה את זה בשורה אחת), או ודאו שבטוח להריץ אותן במקביל. Cron גם לא משלים פערים: אם המחשב כבוי ב-02:30, המשימה של 02:30 פשוט לא תרוץ באותו לילה.
*/5 * * * * flock -n /tmp/backup.lock /usr/local/bin/backup.sh
קיצורים והבדלים קטנים
מימושים רבים של cron מקבלים קיצורים כמו @hourly, @daily, @weekly, @monthly ו-@reboot במקום חמישה שדות. ברובם אפשר לכתוב את יום ראשון כ-0 או כ-7, ומותרים גם שמות כמו MON או JAN. הפלטפורמות נבדלות בפרטים, אז בדקו את התיעוד של המערכת שתריץ את המשימה, במיוחד בתזמונים מנוהלים בענן.
לאן הולך הפלט?
כברירת מחדל cron שולח את פלט המשימה במייל למשתמש המקומי, וברוב השרתים זה אומר שהוא פשוט נעלם. הפנו את הפלט לקובץ לוג או למערכת הלוגים שלכם, כדי שמשימה שנכשלת תשאיר עקבות:
30 2 * * * /usr/local/bin/report.sh >> /var/log/report.log 2>&1
בודקים לפני שמעלים
הדביקו ביטוי במסביר ביטויי ה-Cron של 4Dev והוא יקרא לכם את התזמון בשפה פשוטה. הוא תומך בפורמט הסטנדרטי של חמישה שדות; ביטויים של שישה או שבעה שדות עם שניות או שנים, כמו ב-Quartz או ב-Spring, נדחים עם הודעת שגיאה.