Cron job וקסמי האוטומציה
Cron היא תוכנה המהווה חלק אינטגרלי של מערכת ההפעלה לינוקס שמאפשרת לתזמן הרצת משימות cron jobs. מאוד חשוב להכיר את הנושא כדי לעשות אוטומציה של תהליכים. לדוגמה, לקבוע שמנקים את הקאש פעם ביום, מגבים פעם בשבוע או שולחים דו"ח פעם ברבעון.
את משימות cron jobs שהמערכת נדרשת לבצע כותבים בתוך קובץ. כדי להוסיף משימות נקליד את הפקודה הבאה לתוך הטרמינל:
$ crontab -e
בפעם הראשונה בה נריץ את הפקודה בטרמינל תופיע השאלה באיזה עורך editor להשתמש.
במדריך נשתמש ב-vim אבל יכול להיות שלכם יהיה נוח יותר להשתמש בעורך אחר (מתחילים בדרך כלל אוהבים לעבוד עם nano).
אם אתם עובדים עם vim לחיצה על המקש i תעביר אתכם למצב עריכה.
בכל שורה כותבים משימה אחת כולל מתי המשימה צריכה לרוץ ואיזה פקודה להריץ.
כדי להריץ את הפקודה "run_backup" בראשון לכל חודש בשעה 12:30, נכתוב את ה-cron job הבא לתוך הקובץ:
30 12 1 * * run_backup
קוראים את זה משמאל לימין:
- המקום הראשון הוא בשביל הדקה שבה הפקודה צריכה לרוץ והערך הוא 0 - 59 כי יש 60 דקות בשעה.
- במקום השני השעה בה בה הפקודה תרוץ. הערכים הם בטווח 0 - 23. כוכבית אומרת בכל שעה.
- במקום השלישי היום בחודש. הערכים הם בטווח 1 - 31.
- במקום הרביעי החודש. הערכים הם 1 - 12.
- במקום החמישי היום בשבוע. הערכים הם 0 - 6 כאשר 0 הוא יום ראשון ו-6 שבת.
- לבסוף, הפקודה שצריך להריץ.
נחזור לדוגמה:
30 12 1 * * run_backup
- במקום הראשון והשני הדקות והשעות (12:30).
- במקום השלישי היום בחודש (1) כדי שהפקודה תרוץ בראשון לחודש.
- במקום הרביעי החודש. מכיוון שאנחנו רוצים שהפקודה תרוץ בכל חודש נכתוב במקום כוכבית (*).
- היום בשבוע לא משנה ולכן השתמשנו בכוכבית.
תחביר ה-cronjob מסוכם בקובץ /etc/crontab:
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
- הקובץ /etc/crontab משמש את הקרון הכללי של מערכת ההפעלה, ה-system crontab. בעוד אנחנו עובדים על קובץ המיועד למשתמש שלנו user crontab.
בשביל הבדיקה נכתוב את השורה הבאה שמדפיסה את הביטוי "Hello" ואחריו הזמן בו הסקריפט רץ לקובץ זמני פעם בדקה:
* * * * * echo "Hello $(date)" >> /tmp/test.txt
כדי לצאת מ- vim נקליק על מקש:
Esc
ואז נקליד:
:wq
כדי לשמור.
עכשיו אחרי ששמרנו נוודא את מה שעשינו. כדי לראות את רשימת המשימות ב-crontab נקליד לתוך הטרמינל:
$ crontab -l
בשלב זה, אנחנו אמורים לראות את הפקודה שהוספנו לקרון:
* * * * * echo "Hello $(date)" >> /tmp/test.txt
נוודא שהפקודה אכן רצה על ידי פתיחת הקובץ לקריאה:
$ cat /tmp/test.txt
Hello Tue 07 Feb 2023 06:50:01 IST
Hello Tue 07 Feb 2023 06:51:01 IST
Hello Tue 07 Feb 2023 06:52:01 IST
הפקודה אכן רצה כמתוכנן מדי דקה.
במידה ונרצה שהפקודה תרוץ בתחילת כל שעה אז נשנה את הערך בשדה דקות לאפס:
0 * * * * echo "Hello $(date)" >> /tmp/test.txt
אופרטורים של cron job
אפשר להגיע לתזמון מאוד מדויק של הרצת פקודות. בשביל זה צריך להכיר את האופרטורים הבאים:
-
בכוכבית (*) נשתמש כדי לציין את כל הערכים האפשריים בשדה.
לדוגמה:
50 23 * * 0 root/backup.sh
- ביום ראשון בשעה 23:50 תריץ את הפקודה לגיבוי. ללא תלות ביום או בחודש.
-
פסיק (,) מציין מספר ערכים בשדה.
לדוגמה:
50 23 * * 0,2,5 root/backup.sh
- יריץ את הפקודה בימים ראשון, שלישי ושישי.
-
מקף (-) מציין טווח של ערכים.
לדוגמה:
50 23 * * 0-4 rm -rf /tmp/*
- תריץ פקודה למחיקת הקבצים הזמניים בכל אחד מימות השבוע (ראשון עד חמישי).
-
מפריד (/) מציין מספר ערכים מופרדים.
לדוגמה:
*/15 * * * * /home/script.sh
- הפקודה תריץ את הסקריפט כל 15 דקות.
שני דברים לסיום
לכתיבת פקודות cron אני נעזר בכל חינמי מצויין crontab.guru.
בכל פעם ש cron מריץ cron job הוא שולח מייל לחשבון המוגדר במערכת. כדי למנוע את ההתנהגות נוסיף בסוף הפקודה הפנייה לשום מקום. לדוגמה:
*/15 * * * * /home/script.sh >/dev/null 2>&1
אולי גם זה יעניין אותך:
10 דברים שאתה צריך לדעת כשאתה עורך קבצים באמצעות vim
הכנסת קבצים לארכיון, חילוץ וכיווץ כשעובדים עם לינוקס
אהבתם? לא אהבתם? דרגו!
0 הצבעות, ממוצע 0 מתוך 5 כוכבים
המדריכים באתר עוסקים בנושאי תכנות ופיתוח אישי. הקוד שמוצג משמש להדגמה ולצרכי לימוד. התוכן והקוד המוצגים באתר נבדקו בקפידה ונמצאו תקינים. אבל ייתכן ששימוש במערכות שונות, דוגמת דפדפן או מערכת הפעלה שונה ולאור השינויים הטכנולוגיים התכופים בעולם שבו אנו חיים יגרום לתוצאות שונות מהמצופה. בכל מקרה, אין בעל האתר נושא באחריות לכל שיבוש או שימוש לא אחראי בתכנים הלימודיים באתר.
למרות האמור לעיל, ומתוך רצון טוב, אם נתקלת בקשיים ביישום הקוד באתר מפאת מה שנראה לך כשגיאה או כחוסר עקביות נא להשאיר תגובה עם פירוט הבעיה באזור התגובות בתחתית המדריכים. זה יכול לעזור למשתמשים אחרים שנתקלו באותה בעיה ואם אני רואה שהבעיה עקרונית אני עשוי לערוך התאמה במדריך או להסיר אותו כדי להימנע מהטעיית הציבור.
שימו לב! הסקריפטים במדריכים מיועדים למטרות לימוד בלבד. כשאתם עובדים על הפרויקטים שלכם אתם צריכים להשתמש בספריות וסביבות פיתוח מוכחות, מהירות ובטוחות.
המשתמש באתר צריך להיות מודע לכך שאם וכאשר הוא מפתח קוד בשביל פרויקט הוא חייב לשים לב ולהשתמש בסביבת הפיתוח המתאימה ביותר, הבטוחה ביותר, היעילה ביותר וכמובן שהוא צריך לבדוק את הקוד בהיבטים של יעילות ואבטחה. מי אמר שלהיות מפתח זו עבודה קלה ?
השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.