מדריך למשימות מתוזמנות - cron¶
יש רגע נחמד בלמידת לינוקס, שבו אתם מבינים שאתם לא צריכים לזכור להריץ גיבוי כל יום בעצמכם, כי המחשב יכול לעשות את זה בשבילכם, בשעה קבועה, בלי שתגעו בכלום. הכלי שעושה את זה נקרא cron, וזה בעצם שעון מעורר למחשב שלכם - רק שבמקום להעיר אתכם, הוא מריץ פקודות.
מה זה בעצם cron¶
cron הוא שירות שרץ ברקע במערכת לינוקס, ובודק כל דקה אם יש משימה שצריך להריץ עכשיו. המשימות עצמן מוגדרות בקובץ שנקרא crontab, ולכל משתמש במערכת יש crontab נפרד משלו. אם אתם רוצים לערוך אותו, פשוט מריצים בטרמינל:
זה פותח עורך טקסט שבו כל שורה מייצגת משימה מתוזמנת אחת.
התחביר המוזר עם חמשת השדות¶
זה החלק שמבלבל הכי הרבה מתחילים, אבל ברגע שמבינים את ההיגיון זה נהיה טבעי. כל שורה ב-crontab בנויה מחמישה שדות שמייצגים זמן, ואחריהם הפקודה שרוצים להריץ:
הסדר של השדות הוא - דקה, שעה, יום בחודש, חודש, ויום בשבוע. הכוכבית * פירושה "כל ערך אפשרי". אז אם אתם רוצים להריץ סקריפט כל יום בשעה שלוש לפנות בוקר, זה נראה כך:
אפס בשדה הדקות, שלוש בשדה השעות, וכוכביות בכל השאר - כלומר כל יום, בכל חודש, בלי קשר ליום בשבוע.
דוגמאות שתשתמשו בהן באמת¶
בואו נראה כמה דוגמאות מעשיות שממחישות את ההיגיון:
מריץ סקריפט בשעה 8:30 בבוקר, רק בימים ראשון עד חמישי (1 עד 5 מייצגים ימים בשבוע).
מריץ כל 15 דקות - הסימן
*/15 אומר "כל 15 יחידות בשדה הזה".
מריץ בחצות, ביום הראשון של כל חודש.
ברגע שהתחביר הזה נטמע, אתם יכולים לתזמן כמעט כל דבר בלי לחשוב פעמיים.
למה זה כל כך שימושי¶
cron הופך אתכם מ"מי שצריך לזכור לעשות דברים" ל"מי שבנה מערכת שעושה דברים בשבילו". גיבויים אוטומטיים, ניקוי קבצים זמניים ישנים, שליחת דוחות יומיים, בדיקת תקינות שרת כל כמה דקות - כל אלה דברים שבלי תזמון אוטומטי הייתם צריכים לזכור לעשות ידנית, ובוודאות הייתם שוכחים בשלב מסוים. השילוב בין cron לסקריפט בבאש הוא אחד הצמדים החזקים ביותר בעולם לינוקס - הסקריפט עושה את העבודה, וה-cron דואג שהוא יקרה בזמן הנכון בלי מעורבות שלכם.
טעויות נפוצות שכדאי להכיר¶
הטעות הראשונה היא לשכוח שנתיבים ב-crontab צריכים להיות מלאים. כשאתם מריצים סקריפט ידנית מהתיקייה שלו, ./script.sh מספיק. אבל cron לא יודע איפה אתם "נמצאים", אז כדאי תמיד לכתוב את הנתיב המלא, כמו /home/user/scripts/backup.sh.
הטעות השנייה היא לא לבדוק את הלוגים כשמשהו לא עובד. cron רץ בשקט, בלי להציג לכם שגיאות על המסך, אז אם משימה נכשלת אתם לא תדעו את זה אלא אם תבדקו את פלט הריצה - הרגל טוב הוא להפנות את הפלט של הסקריפט לקובץ לוג, כדי שיהיה לכם תיעוד אם משהו משתבש.
לא צריך לזכור הכל בעל פה¶
אני לא מצפה שתזכרו את התחביר של cron מהראש בכל פעם. גם מפתחים מנוסים בודקים כלי אונליין שמתרגם לוח זמנים לתחביר cron כשהם לא בטוחים. מה שחשוב זה להבין את ההיגיון - חמישה שדות, כוכבית אומרת "הכל", ומשם אפשר תמיד לבדוק את הפרטים הקטנים.
בקורס לינוקס הבסיסי שלנו יש פרק שלם על משימות מתוזמנות, עם תרגילים שמראים בדיוק איך לשלב cron וסקריפטים כדי לבנות אוטומציה אמיתית.
למדו על cron בקורס לינוקס הבסיסי
ואם התחביר מבלבל אתכם באמצע תרגול, תשאלו בדיסקורד, זה נושא שכל מי שלמד לינוקס עבר בו.