| היסטוריית גירסאות | ||
|---|---|---|
| גירסה 1.1 | 05-04-2007 | כתריאל טראום |
| הומר לפורמאט וויקי | ||
| גירסה 1.0 | 25-07-2003 | נחום מזרחי |
| שחרור ראשון | ||
כל הזכויות שמורות © 2007, כתריאל טראום, הרשות ניתנת להעתיק, לשנות ולהפיץ מדריך זה תחת התנאים של רשיון ה-GFDL
Linux הוא סימן מסחרי רשום של Linus Torvalds.
הכותב אינו נושא באחריות עבור שימוש ברעיונות, דוגמאות ומידע שבמדריך. השימוש הוא באחריות הקורא בלבד. המדריך עשוי להחיל טעויות ופרטים לא נכונים, שהשימוש בהם עשוי להיות מזיק למחשבך. למרות הסבירות הנמוכה, הכותב אינו לוקח כל אחריות
תגובות, תלונות, הערות והארות לכתובת הנ”ל.
במערכת לינוקס (ובעצם בכל מערכת הפעלה) יש פעולות שאנו מבצעים (או צריכים לבצע) בזמנים קבועים. בין הפעולות האלו נוכל למנות את הגיבויים, ניקוי קבצי לוג, יצירת דו”חות, מחיקת קבצים זמניים ועוד.
את הפעולות האלו יש לבצע בזמנים קבועים ואי ביצוען יכול להוביל לאבדן מידע, לאי-אחידות בהצגת נתונים ולבעיות נוספות.
לצורך פתרון בעיות אלו נוצרו כלים לאוטומציה של ביצוע פעולות. כלי האוטומציה מאפשרים לנו לקבוע מועד לביצוע פעולה כך שהמערכת תבצע אותה באופן אוטומטי.
ניתן לקבוע זמנים קבועים (פעם בשבוע, פעם בחודש, בכל יום בשעה 16:15, כל 10 דקות בימי שני ושלישי וכו') וניתן לקבוע זמן ביצוע יחיד לפעולה חד-פעמית.
ניתן לבצע בעזרת כלים אלו כל פעולה המורכבת מפקודה בודדת או ביצוע של סקריפט.
מדריך זה מסביר את השימוש בכלי אוטומציה אלו תחת מערכת redhat אך בשינויים קלים יתאים עבור מערכות אחרות.
כדי לבצע משימות/פעולות באופן אוטומטי ישנם שלושה כלים:
בפרקים הבאים אסקור את שלושת השיטות שתוארו.
מערכת Redhat מותקנת עם השרות הזה כברירת מחדל. במידה והשרות לא מותקן, נחפש ונתקין חבילה בשם vixie-cron.
על מנת לוודא שהשרות מופעל:
[root@MySystem etc]# service crond status
במידה והוא אינו פועל יש להפעילו ע”י
[root@MySystem etc]# service crond start
במקרה זה יש לשים לב שהפעלה זו היא חד פעמית ויש צורך “לקבע” אותה. לפרטים נוספים יש לקרוא במדריכים הרלוונטיים.
הקובץ המשמש להגדרת המשימות המתוזמנות הוא /etc/crontab
ובברירת המחדל הוא נראה כך:
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly
בהמשך הקובץ נראה את המשימות לביצוע וזמני הביצוע שלהן. כל שורה מורכבת מחמישה פרמטרים הקובעים את התזמון ומפקודה לביצוע, הנה כך:
minute hour day month dayofweek command
הערה חשובה: לפרמטרים 4,5 ניתן לתת ערכים אלפאנומריים כגון sun,mon,feb,mar וכך למנוע בילבול מיותר בפרמטר החמישי. (ברור יותר ש- sun מייצג את יום ראשון מאשר 0).
כוכבית מייצגת את כל הערכים, למקרה שנרצה להריץ פקודה בכל יום בשבוע או פעם בשעה. לכל הערכים המספריים ניתן לציין טווח או רשימה מופרדת בפסיקים או שילוב של השתיים - דוגמאות בהמשך.
סימן סלאש הפוך / מייצג ערך לדילוג קבוע: \
במערכות Redhat לא נהוג להוסיף שורות לקובץ זה ובמקום זאת יש להוסיף קובץ במבנה זהה לזה לתוך ספריית etc/crond.d/ אך צריך להשמיט את חלקו הראשון של הקובץ העוסק בהגדרת השרות.
root יכול להוסיף כל קובץ לסיפרייה זו והוא יבוצע במסגרת התזמון שהוגדר. המערכת בודקת פעם בדקה את השינויים בספרייה זו ומתעדכנת בהתאם.
משתמשים שאינם root צריכים להשתמש בתוכנית העזר crontab על מנת ליצור משימות משלהם. לכל משתמש יש קובץ משימות משלו והפקודות בו מבוצעות תחת שם המשתמש שלו.
קבצי המשתמשים מאוחסנים ב- var/spoll/cron/ ואסור לשנותם באופן ידני אלא להשתמש בתוכנית העזר crontab עם המתג e- .
תוכנית עזר זו פותחת את הקובץ לעריכה בעורך שהוגדר ע”י משתני הסביבה.
כאמור, כל משתמש יכול להוסיף משימה שתרוץ תחת שם המשתמש שלו ע”י שימוש בתוכנית העזר crontab עם המתג e- .
דוגמאות אחדות המבהירות את התזמונים:
מתוך ה- shell של root נוכל לכתוב crontab -e ולהוסיף את השורה הבאה:
15 19 * * * updatedb
זה יבצע את updatedb בכל יום בשעה 19:15
5 8 1 * * cp ~/* /mybackupdirectory/
כך תופעל הפקודה cp ~/* /mybackupdirectory בכל פעם שהתאריך יהיה 1 בחודש, בכל חודש בשעה 8:05 לפנות בוקר.
0 */2 * * * command
הפעולה המצויינת ע”י command תבוצע פעם בשעתיים, בתחילת השעה (0 דקות בשעון המערכת).
30 20-8/3 * * * command
הפקודה command תבוצע בכל פעם ששעון המערכת יראה 30 דקות והשעה תהייה בין שמונה בערב לשמונה לפנות בוקר, בכל שעה שלישית.
15 16 7 5 * command
בכל פעם שהתאריך יהיה השביעי במאי, והשעה תהייה 16:15 תבוצע הפקודה command.
0 * 13 * fri command
* * * * * command
כאמור, command יכול להיות סקריפט או פקודה בודדת.
במערכת Redhat הוספה תכונה חביבה בשם run-parts המבצעת את כל הסקריפטים הנמצאים בספרייה מסויימת.
כברירת מחדל, כפי שניתן לראות בקובץ etc/crontab/ מוגדרות ארבע סיפריות שהסקריפטים בהן מבוצעים פעם בשעה, פעם ביום, פעם בשבוע ופעם בחודש. הסיפריות הן:
etc/cron.daily/ etc/cron.hourly/ etc/cron.weekly/
etc/cron.monthly/
כל סקריפט שימוקם בסיפריות אלו יבוצע בהתאם להגדרות ב- etc/crontab/ וכך ניתן “לחסוך” את כתיבת התזמון בעצמנו, בתנאי שהתזמונים מתאימים לביצוע המשימה.
ניתן למנוע ממשתמשים מסויימים להשתמש במערכת התזמונים או לחילופין להגדיר רק רשימת שמות משתמשים שלהם הזכות לערוך משימות מתוזמנות.
רשימות אלו מאוחסנות בקבצים:
/etc/cron.allow /etc/cron.deny
בתוך הקובץ נרשום את שמות המשתמשים כאשר כל שם בשורה נפרדת, ללא רווחים מיותרים בתוך הקובץ.
רשימת השמות בקובץ cron.allow מגדירה את הרשימה של המשתמשים שלהם מותר לערוך רשימת משימות מתוזמנות. במקרה שקובץ זה קיים, המערכת מתעלמת מקיומו של קובץ cron.deny .
במידה וקובץ cron.allow לא קיים, באופן אוטומטי מוגדרת גישה לכל המשתמשים במערכת למעט אלו ששם המשתמש שלהם מופיע בקובץ cron.deny .
הערה: אין צורך לאתחל את השרות crond לאחר שינוי בקבצים אלו. הקבצים נבדקים בכל פעם מחדש לפני ביצוע הפקודות.
מערכת ה- anacron דומה מאוד למערכת ה- cron למעט זה שהיא מניחה שהמערכת לא מופעלת תמידית ולכן מבקרת את ביצוע המשימות ומבצעת משימות שלא בוצעו בגלל שהמערכת היתה כבויה.
השרות מותקן מתוך חבילת anacron ובמערכות Redhat הוא מותקן כברירת מחדל אך לא מופעל. ע”מ לראות אם השרות מותקן:
[root@MySystem root]# rpm -q anacron
במידה ואינו מותקן יש להתקינו בעזרת rpm. ע”מ לראות אם השרות מופעל:
[root@MySystem root]# service anacron status
ע”מ להפעיל את השרות:
[root@MySystem root]# service anacron start
הקובץ הראשי של anacron הוא etc/anacrontab/ והוא משמש להגדרת המשימות שיבוצעו.
מבנה שורה בקובץ זה הוא:
period delay job-identifier command
anacron בודק אם הפקודה בוצעה בתקופת הזמן שהוגדרה ע”י period ואם לא, הוא ממתין delay דקות ומבצע אותה.
דוגמה לקובץ ברירת המחדל של anacron:
# /etc/anacrontab: configuration file for anacron # See anacron(8) and anacrontab(5) for details. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # These entries are useful for a Red Hat Linux system. 1 5 cron.daily run-parts /etc/cron.daily 7 10 cron.weekly run-parts /etc/cron.weekly 30 15 cron.monthly run-parts /etc/cron.monthly
ניתן להבחין כי המשימות של anacron לפי הקובץ הזה מאפשרות להריץ את הסקריפטים הקבועים מראש אך בניגוד ל- crontab, במידה והם לא הורצו בזמן הנדרש, הם יורצו מייד. בסיום הביצוע של כל משימה יתווסף קובץ בשם שהוגדר ע”י job-identifier לספריית var/spool/anacron/ ובו הזמן (תאריך בלבד, ללא שעה) שבו התבצעה הפעולה וכך יכולה מערכת ה- anacron לוודא את הביצוע.
cron.hourly אינו מבוצע ע”י anacron כיוון שזו אינה בודקת ביצוע במרווחים של דקות או שעות אלא רק במרווחים של ימים.
מערכת ה- at מבצעת פקודות באופן חד פעמי, בזמנים הנקבעים מראש.
השרות מותקן מתוך חבילת at ובמערכות Redhat הוא מותקן ומופעל כברירת מחדל. ע”מ לראות אם השרות מותקן:
[root@MySystem root]# rpm -q at
במידה ואינו מותקן יש להתקינו בעזרת rpm.
ע”מ לראות אם השרות מופעל:
[root@MySystem root]# service atd status
ע”מ להפעיל את השרות:
[root@MySystem root]# service atd start
על מנת לקבע את ההפעלה יש לקרוא מדריכים רלוונטיים.
תזמון משימה נעשה ע”י הקשת
[root@MySystem root]# at TIME
האפשרויות של TIME הן:
לאחר הקשת הפקודה יתקבל סמן המורה להקיש את רצף הפקודות לביצוע. שים לב כי ניתן להקליד מספר פקודות שיבוצעו בזו אחר זו או אפילו מספר סקריפטים שיבוצעו בזה אחר זה.
מעבר בין שורה לשורה נעשה ע”י הקשת Enter ולסיום נקיש Ctrl + D. המשימה תתוסף לרשימת המשימות לביצוע ותתחיל בשעה הנקובה.
במידה ולרצף הפקודות יהיה פלט כלשהו, הוא ישלח בדואל למשתמש שהפעיל את הפקודות.
על מנת לראות את רשימת המשימות המתוזמנות בעזרת at יש להקליד atq. הפלט יציג רשימה של פקודות והזמן שבו הן מתוכננות לביצוע.
במידה ומשתמש שאינו root מבצע atq הוא יכול לראות רק את המשימות שהוא קבע. רק root יכול לראות את כל המשימות המתוזמנות.
אפשרות נוספותאשר ניתן לבצע:
at TIME -f filename
ואז רשימת הפקודות לביצוע ע”י at תלקח מתוך הקובץ שצויין.
ניתן לתזמן משימה כך שהיא תבוצע בזמן שבו עומס המערכת הוא מתחת ל- 0.8 .
פקודת batch אינה מקבלת ארגומנטים של זמן אלא רק את הארגומנטים של משלוח דואל, קריאה מקובץ והצגת הזמן (בדיוק כמו at) ולאחר הקשתה היא תתנהג כמו פקודת at בדיוק אך זמן ביצוע הפקודות יהיה הזמן הקרוב ביותר שבו המערכת לא תהייה עמוסה מעל ל- 0.8 .
ניתן למנוע ממשתמשים מסויימים להשתמש במערכת התזמונים או לחילופין להגדיר רק רשימת שמות משתמשים שלהם הזכות לערוך משימות מתוזמנות.
רשימות אלו מאוחסנות בקבצים
/etc/at.allow /etc/at.deny
בתוך הקובץ נרשום את שמות המשתמשים כאשר כל שם בשורה נפרדת, ללא רווחים מיותרים בתוך הקובץ. רשימת השמות בקובץ at.allow מגדירה את הרשימה של המשתמשים שלהם מותר לערוך רשימת משימות מתוזמנות. במקרה שקובץ זה קיים, המערכת מתעלמת מקיומו של קובץ at.deny .
במידה וקובץ at.allow לא קיים, באופן אוטומטי מוגדרת גישה לכל המשתמשים במערכת למעט אלו ששם המשתמש שלהם מופיע בקובץ at.deny .
הערה: אין צורך לאתחל את השרות atd לאחר שינוי בקבצים אלו. הקבצים נבדקים בכל פעם מחדש לפני ביצוע הפקודות.