מה זה CronJob ואיך הוא עובד

CronJob text on a orange background

CronJob הוא כלי לניהול והפעלת משימות מתוזמנות באופן אוטומטי במערכות הפעלה מבוססות Unix, כמו Linux ו-macOS. מבוססות Unix הכוונה למערכות הפעלה שפותחו על בסיס מערכת ההפעלה Unix, שהייתה אחת הראשונות בתחום. מערכות כמו Linux ו-macOS נחשבות ל"מבוססות Unix" כי הן חולקות תכונות ומבנה ליבה שמקורם ב-Unix, כמו ניהול קבצים, פקודות טקסט, ומערכת הרשאות.

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

הפורמט והמבנה של CronJob

CronJob בנוי מ-5 חלקים (כוכביות), שכל אחד מהם מייצג חלק מהזמן שבו המשימה תרוץ:

* * * * * command-to-be-executed

הכוכביות מייצגות את המרווחים הבאים:

  • דקה (0-59)
  • שעה (0-23)
  • יום בחודש (1-31)
  • חודש (1-12)
  • יום בשבוע (0-7, כאשר 0 או 7 הם יום ראשון)

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

0 3 * * * python /scripts/my_script.py

במקרה הזה, הסקריפט שבנתיב /scripts/my_script.py יופעל בכל יום בשעה 3:00 לפנות בוקר.

האם CronJob הוא Serverless? דמיון והבדלים

למרות שיש כמה קווים דומים בין CronJob למודלים serverless (ללא שרת), הם אינם זהים.

מה זה Serverless?

המונח "serverless" עשוי להטעות כי זה נשמע שלא מעורבים שרתים, אבל זה לא מדוייק, כי כן יש שרתים, אבל הם לא באחריות המתכנתים, אלא באחריות ספקי הענן (cloud provider) כמו AWS, Google Cloud, Azure וכדומה. הם דואגים לנהל את השרת, לדאוג לעדכוני תוכנה, לוודא שהשרת מסוגל להתמודד עם עומסי תעבורה ולשמור על בריאות השרת.

גישה זו קשורה לעיתים למונח Function as a Service (FaaS), שבה הקוד שלכם מאורגן כמערכת פונקציות שכל אחת מטפלת במשימה ספציפית. הפונקציות מופעלות בתגובה לאירועים כמו בקשות HTTP או אינטראקציות משתמש, והן לא פעילות באופן רציף, אלא מופעלות בתגובה לאירועים.

רוצים לקרוא קצת יותר על ההבדל בין Serverless ל-Server-Based? כנסו למאמר המלא: השוואה בין Serverless ל-server-based

ניהול משימות ב-CronJob

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

הבדלים בין CronJob ל-serverless

שתי השיטות מאפשרות ביצוע משימות מתוזמנות, אך ההבדל המרכזי הוא ביכולת ניהול התשתית. ב-CronJob אתם נדרשים לנהל את השרתים בעצמכם, בעוד שב-serverless ספקי הענן דואגים לכל ניהול התשתית. אם יש לכם תשתית שרצה ברקע באופן קבוע, תעדיפו אולי להשתמש ב-CronJob, אך אם אתם מעוניינים בתזמון משימות בלי לדאוג לניהול שרתים רציף, תוכלו להשתמש ב-Scheduled Functions בסביבה serverless.

מה זה Scheduled Functions

Scheduled Functions הן פונקציות שמתפקדות כמו CronJob, רק בסביבה serverless. ההבדל הוא שהפונקציה "מתעוררת" לפעולה רק בזמן המוגדר ולא רצה כל הזמן ברקע כמו ב-CronJob מסורתי​, אלא מבצעות את המשימה, ואז "נכבות" שוב עד לפעם הבאה. היתרון בגישה זו הוא שהפונקציה לא שואבת משאבים או תופסת מקום בזיכרון כל הזמן, אלא מופעלת רק כשצריך.

לדוגמה, Vercel היא פלטפורמה serverless, ולכן ניתן להגדיר Scheduled Functions שתפעל כל יום, שבוע וכדומה כמו ב-CronJob רגיל, אבל בצורה serverless, כלומר היא לא פועלת כל הזמן אלא רק בזמן המתוזמן​.

מתי נרצה להשתמש ב-CronJob?

נשתמש ב-CronJob כאשר יש צורך בביצוע משימות מתוזמנות, כגון:

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

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

חברות פופולריות שמציעות שירותי CronJob

ישנן מספר פלטפורמות וחברות שמאפשרות ליצור ולהריץ CronJobs בענן, ביניהן:

  • AWS (Amazon Web Services): באמצעות שירות AWS Lambda יחד עם EventBridge (או CloudWatch Events לשעבר), ניתן להגדיר משימות מתוזמנות שמריצות קוד ללא צורך בשרתים.

  • Google Cloud: מציעה את Cloud Scheduler שמאפשר להגדיר משימות Cron ולנהל אותן בשרתים וירטואליים.

  • Heroku: פלטפורמת Heroku מציעה שירות CronJob כחלק מהשירותים שלה, באמצעות add-on שנקרא Heroku Scheduler.

  • DigitalOcean: מציעה אפשרות להריץ CronJobs על גבי droplets (מכונות וירטואליות), עם גישה קלה וניהול פשוט.

  • GitLab: מציעה כלי CI/CD שכולל אפשרות להגדיר משימות Cron כחלק מתהליכי הפיתוח והאינטגרציה המתמשכת.

  • Kubernetes: מציעה יכולת להריץ CronJobs על קונטיינרים, המתאימים לניהול משימות בקנה מידה גדול יותר.

  • Cron-Job.org: פלטפורמה זו מציעה ממשק פשוט ונוח להגדרת CronJobs בענן ללא תלות בשרתים מקומיים.