Cron & crontab, הסביר

לוסיין פורסם לפני כמה זמן הדרכה מצוינת על cron ו- crontab שלדעתי כדאי לשתף. Cron הוא סוג של שווה ערך למשימות מתוזמנות ב- Windows, רק שהוא מטופל מהטרמינל. מי שמעדיף ממשק ויזואלי להשגת אותה מטרה, יכול לראות זאת עוד פריט.

מה זה קרון?

השם cron מקורו ב- chronos היווני שפירושו "זמן". במערכת ההפעלה יוניקס, cron הוא מנהל תהליכי רקע רגיל (daemon) שמריץ תהליכים או סקריפטים במרווחי זמן קבועים (למשל, כל דקה, יום, שבוע או חודש). התהליכים שיש לבצע והשעה שבהם יש לבצע מוגדרים בקובץ crontab.

עבודות קומו

הדמון של הכתר מתחיל מ /etc/rc.d/ o /etc/init.d תלוי בחלוקה. קרון רץ ברקע, בודק את טבלת המשימות של crontab בכל דקה / etc / crontab ב / var / spool / cron בחיפוש אחר משימות שיש לבצע. כמשתמש אנו יכולים להוסיף פקודות או סקריפטים עם משימות לקרון כדי להפוך תהליכים אוטומטיים. זה שימושי למשל לאוטומציה של עדכון מערכת או מערכת גיבוי טובה.

Artaculo relacionado:
הדרכה: התקן את חבילות .tar.gz ו- .tar.bz2

מה זה Crontab?

Crontab הוא קובץ טקסט פשוט המאחסן רשימת פקודות לביצוע בזמן שצוין על ידי המשתמש. Crontab יוודא את התאריך והשעה שבהם יש לבצע את הסקריפט או הפקודה, הרשאות הביצוע והיא תעשה זאת ברקע. לכל משתמש יכול להיות קובץ crontab משלו, למעשה ה- / etc / crontab ההנחה היא שהיא קובץ ה- crontab של משתמש השורש, כאשר משתמשים רגילים (ואפילו שורש) רוצים ליצור קובץ crontab משלהם, נשתמש בפקודה crontab.

Crontab היא הדרך הקלה ביותר לנהל משימות cron במערכות רב משתמשים, כמשתמש מערכת פשוט או כמשתמש שורש.

באמצעות crontab

אנו מתחילים בדוגמה פשוטה.

אנו הולכים לבצע אוטומציה של עדכון המערכת, כדי לבטל את המעצבן של "אני תמיד צריך לעדכן ואני לא אוהב את זה!"

איך
Artaculo relacionado:
פקודות להכרת המערכת (זיהוי חומרה ותצורות תוכנה מסוימות)

קודם כל נכין תסריט. סקריפט זה ייקרא על ידי cron ויכיל את כל ההוראות שנרצה שיעשה, לכן יש צורך לבדוק אותו בכמה מקרים ובכמה דרכים לפני הכללתו ב- cron, סקריפט עדכון פשוט כזה:

#! / bin / bash # דוגמה לעדכון הסקריפט # בחר את ההפצה שלך # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

הסר את ה- # מקו ההפצה שלך. במקרה שמדובר באובונטו / דביאן, זה מתחיל עם apt-get.

אנו שומרים את הסקריפט כ- update.sh (למשל, ספריות סקריפטים בביתך). אנו משנים את הרשאות הביצוע של התסריט האמור באמצעות:

chmod a + x ~ / scripts / update.sh

אנו מריצים את הסקריפט כמה פעמים כדי לוודא שהכל פועל בצורה חלקה, אנו משנים את הדרוש (אסור להכיל שגיאות, אחרת cron רק יחזור על שגיאה שוב ושוב). עכשיו כדי להוסיף את המשימה לקרונטאב שלנו.

הוסף משימות ל- crontab

אנו מבצעים את המהדורה של crontab עם crontab -e, בכמה הפצות (כמו אובונטו) זה נותן לנו אפשרות לבחור את עורך הטקסט שאנחנו רוצים, את השאר נשאר לנו. קובץ crontab ייראה בערך כך.

# mh פקודת משתמש dom mon dow

איפה:

  • m תואם את הרגע בו התסריט יבוצע, הערך נע בין 0 ל -59
  • h בזמן המדויק, מטפל בתבנית 24 שעות, הערכים נעים בין 0 ל -23, כאשר 0 הם 12:00 בחצות.
  • dom מתייחס ליום בחודש, למשל אתה יכול לציין 15 אם אתה רוצה לרוץ כל 15 יום
  • dow פירושו יום השבוע, זה יכול להיות מספרי (0 עד 7, כאשר 0 ו -7 הם יום ראשון) או שלוש האותיות הראשונות של היום באנגלית: שני, ג ', יום רביעי, יום חמישי, יום שבת, שמש.
  • המשתמש מגדיר את המשתמש שיבצע את הפקודה, זה יכול להיות שורש, או משתמש אחר כל עוד יש לו הרשאות לבצע את הסקריפט.
  • הפקודה מתייחס לפקודה או לנתיב המוחלט של התסריט לבצע, לדוגמא: /home/usuario/scripts/update.sh, אם הוא מכנה סקריפט, הוא חייב להיות בר-הפעלה

כדי להיות ברור כמה דוגמאות למשימות cron מוסברות:

15 10 * * * user /home/user/scripts/update.sh

הוא יפעיל את סקריפט update.sh בשעה 10:15 בכל יום

15 22 * * * user /home/user/scripts/update.sh

הוא יפעיל את סקריפט update.sh בשעה 10:15 בכל יום

00 10 * * 0 עדכון root apt-get -y משתמש שורש

זה יפעל עדכון בכל יום ראשון בשעה 10:00 בבוקר

45 10 * * עדכון sun root apt-get -y

משתמש שורש יפעיל עדכון בכל יום ראשון (א ') בשעה 10:45 בבוקר

30 7 20 11 * משתמש / home/usuario/scripts/update.sh

ב -20 בנובמבר בשעה 7:30 המשתמש יריץ את הסקריפט

30 7 11 11 משתמש שמש /home/usuario/scripts/pastel_con_velitas.sh

ב- 11 בנובמבר בשעה 7:30 בבוקר וזה יום ראשון, המשתמש יחגוג את הסיסמין שלו (כלומר אני)

01 * * * * user /home/usuario/scripts/molestorecordatorio.sh

תזכורת מעצבנת כל דקה בכל שעה בכל יום (לא מומלץ).

עדיין ניתן לטפל בהם טווחים מיוחדים:

30 17 * * 1,2,3,4,5

בשעה 5:30 אחר הצהריים כל יום מיום שני עד שישי.

00 12 1,15,28 * *

בשעה 12 בצהריים בכל ראשון, חמש עשרה ו -28 בכל חודש (אידיאלי לשכר עבודה)

אם זה מבלבל, ידיות crontab מחרוזות מיוחדות להגדרת טווחים אלה.

@reboot הפעל פעם אחת, בעת ההפעלה
@yearly פועל רק פעם בשנה: 0 0 1 1 *
@ זהה לזה של @yearly
@monthly פועל פעם בחודש, היום הראשון: 0 0 1 * *
@ שבועי שבועי הרגע הראשון של השעה הראשונה בשבוע. 0 0 * * 0 ″.
מדי יום @ מדי יום, בשעה 12:00 בבוקר. 0 0 * * *
@ Midnight אותו דבר כמו @ Daily
@ שעה ברגע הראשון של כל שעה: 0 * * * *

השימוש בו פשוט מאוד.

משתמש @hourly /home/user/scripts/molestorecordatorio.sh @monthly user /home/user/scripts/backup.sh @ שורש יומי apt-get update && apt-get -y upgrade

אחרון חביב:

ניהול עבודות קרון

קובץ crontab

החלף את קובץ ה- crontab הקיים בקובץ שהוגדר על ידי המשתמש

-e crontab

ערוך את קובץ ה- crontab של המשתמש, כל שורה חדשה תהיה משימה חדשה של crontab.

crontab -l

ציין את כל משימות ה- crontab של המשתמש

crontab -d

מחק את קוד הכניסה של המשתמש

crontab -c dir

מגדיר את ספריית crontab של המשתמש (זו חייבת להכיל הרשאות כתיבה וביצוע של המשתמש)

משתמש crontab -u

קידומת לטיפול בכרטיסיית המשתמש האחרת, דוגמאות:

$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u user

ניתן לראות כלי זה, כמו רבים אחרים, לעומק ובפירוט רב יותר:

תודה לוקיין!

השאירו את התגובה שלכם

כתובת הדוא"ל שלך לא תפורסם. שדות חובה מסומנים *

*

*

  1. אחראי לנתונים: מיגל אנחל גטון
  2. מטרת הנתונים: בקרת ספאם, ניהול תגובות.
  3. לגיטימציה: הסכמתך
  4. מסירת הנתונים: הנתונים לא יועברו לצדדים שלישיים אלא בהתחייבות חוקית.
  5. אחסון נתונים: מסד נתונים המתארח על ידי Occentus Networks (EU)
  6. זכויות: בכל עת תוכל להגביל, לשחזר ולמחוק את המידע שלך.

  1.   אלווארו אורטיז דיג'ו

    אוף ... קצת מבלבל.

  2.   טוניק דיג'ו

    * / 30 חסר (בשדה הדקות) שפועל כל 30 דקות ...

    1.    erm3nda דיג'ו

      בדיוק זה התכוונתי להגיב עד שהחלטתי לסקור את ההערות 😀
      שינוי זה הוא מידע חשוב מאוד ומשהו מאוד שימושי.

      1.    קיקה דיג'ו

        הלו!
        כרגע אני בודק תצורה כל 45 דקות.

        * / 45 * * * *, וההוראה מבוצעת ב 45 דקות של כל שעה וכל שעה. זאת אומרת:

        זה פועל בשעה 3:45, ואז 4:00, 4:45, ואז 5:00, 5:45, 6:00, 6:45 וכן הלאה.

        יש לי משהו לא בסדר? מה אני יכול לעשות כדי להכין אותו רק כל 45 דקות, או לפחות פעם ב 45 דקות בכל שעה.

    2.    קיקה דיג'ו

      הלו!
      כרגע אני בודק תצורה כל 45 דקות.

      * / 45 * * * *, וההוראה מבוצעת ב 45 דקות של כל שעה וכל שעה. זאת אומרת:

      זה פועל בשעה 3:45, ואז 4:00, 4:45, ואז 5:00, 5:45, 6:00, 6:45 וכן הלאה.

      יש לי משהו לא בסדר? מה אני יכול לעשות כדי להכין אותו רק כל 45 דקות, או לפחות פעם ב 45 דקות בכל שעה.

  3.   רפוי דיג'ו

    שלום מידע סופר שימושי כדי להבהיר כיצד cron עובד.
    בתים

  4.   רפוי דיג'ו

    ל *

  5.   צַיָד דיג'ו

    מעולה, תודה שהבהרת איך עובד קרון .. בוא נניח יד קטנה 🙂

  6.   יעקב דיג'ו

    השורה הזו, לפי הבנתי, תבוצע בשעה 10:15, תקן אותי אם אני טועה
    ובכן שם כתוב 10:15 בבוקר
    15 22 * * * user /home/user/scripts/update.sh

  7.   אגוסטין דיג'ו

    שלום! מידע טוב מאוד.
    כדי לבצע סקריפט כל חצי שעה, השורה שיש להוסיף ל- CronTab תהיה: "30 * * * * root Scrip.sh" נכון? תודה רבה לך!

  8.   בואו נשתמש בלינוקס דיג'ו

    לא. אם אני זוכר נכון, בשביל זה אתה צריך לשים / 30 * * * * שורש Scrip.sh.
    כלומר, הוסף את / לפני 30.
    לחיים! פול.

  9.   יונתן דיג'ו

    שלום, אהבתי את הפוסט שלך, הוא שלם מאוד אבל רציתי לשאול אותך משהו.
    יש לי בעיות עם הפקודה הזו וכזו כמו "ב".

    אני רוצה להריץ סקריפט בזמן מסוים ולשים

    בדוגמה -f /home/mi_user/Desk/script.sh 18:08

    והתסריט אינו מבוצע על המסך, כלומר במסוף, האם הוא מבוצע ברקע?

    ועם cron אותו דבר קורה לי, אני עורך את קובץ crontab עם "crontab -e"

    בסוף אני מוסיף את השורה הזו:

    46 19 my_user /home/mi_user/Desk/script.sh

    וזה לא עושה כלום, זה לא מראה את התסריט.

    הצעות כלשהן? תודה רבה ובקש סליחה על אי הנוחות

    1.    בואו נשתמש בלינוקס דיג'ו

      כדי שהטרמינל יופיע, ייתכן שיהיה עליך להפעיל את המסוף ולהעביר את הסקריפט כפרמטר.

      לדוגמה:

      lxterminal -e "my_user /home/my_user/Desk/script.sh"

      הפרמטר לשימוש עשוי להשתנות בהתאם לאמולטור הטרמינל שבו אתה משתמש.

      אני מקווה שזה עובד.

      לְחַבֵּק! פול.

  10.   פטרקטות דיג'ו

    התרומה מוערכת.

    10 נקודות !!

    סאלו2!!

  11.   רודולפו דיג'ו

    תודה רבה, זה עזר לי מאוד להבהיר כמה דברים, תודה מוחלטת, לפרטים נוספים או שאלות שאעבור לדף MAN, ברכות חוזרות.

  12.   ג'אהיר דיג'ו

    דוד תודה רבה, קראתי ובדקתי את הדוגמאות. תודה רבה ... זה מאוד מובן. לחיים

  13.   גאובאני דיג'ו

    השתמשתי ב- Ubuntu Server 12.04.2 LTS, ובגירסת crontab שיש לי, כדי למחוק את רשימת עבודות המשתמש, crontab -r (ו- -l, כמו שאומר במדריך זה). בטח זה על ידי שאלה של גרסאות.

    מצד שני, פעם רצתי רק crontab וסוג זה אפשר לי ליצור קובץ ביצוע עצמי, אבל זה לא זה שהוצא להורג. זה שרץ הוא זה ב- / etc / crontab. אולי מישהו ישתמש בתגובה.

    נ.ב (אני מחפש עם אתר והיכן crontab אבל הוא החזיר רק את הכתובת הנ"ל וקובץ אחר שמוצפן, כך שאם זה שהוצא להורג היה זה ב- / etc / crontab, אך כאשר ביצעתי את הפקודה crontab -e, שלי הופיע עם כל העבודות שהגדרתי) היכן נשמר הקובץ הזה '???? בברכה. אני תמיד נכנס עם שורש.

  14.   סבסטיאן דיג'ו

    מעולה, מאוד שימושי !!!

  15.   מממ דיג'ו

    שלום, אני רוצה לעשות את זה ………… «15 10 * * * root ifdown eth0»

    זאת אומרת שבזמן מסוים כרטיס הרשת נכבה ………… טוב, הנחתי אותו בכניסה המפתית וזה לא עבד …… .. מה קורה?

    Saludos y Gracias

  16.   מיגל דיג'ו

    החמצת את ההגדרה "mon" אחרי הכותרת "הוסף משימות ל- crontab"

    המאמר עדיין נחמד, קרון מאוד שימושי.

  17.   אוסקר דיג'ו

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

    is decdir אני רוצה לראות את ההיסטוריה של הפעולות שנעשו בעבר של הקובץ הזה ואני רוצה לראות מי שינה אותו ואת התאריך

    תודה

  18.   אוסקר דיג'ו

    אני רוצה לבדוק את היסטוריית השינויים של זה

    איך אני יכול לעשות את זה

    תודה

  19.   אנדרס לדו דיג'ו

    בוקר טוב,

    אני חושב שבתסריט של אובונטו טעית, שמת שדרוג ap-get -y במקום שדרוג apt-get -y. (השארת t).

    ברכה.

    1.    בואו נשתמש בלינוקס דיג'ו

      כך גם. תודה!
      לְחַבֵּק! פול

  20.   גבריאל דיג'ו

    אני רוצה לדעת כיצד ליצור קובץ cron כדי להיות מסוגל לציין את השעה שבה כל אחד מבוצע, את הספריה וכו '.

  21.   ולנטין דיג'ו

    תודה שהבהרת את הפעולה ואת הפקודות הבסיסיות עבור cron, עכשיו כדי לבדר את עצמך קצת.

  22.   משחז דיג'ו

    בכל פעם שאני מחפש מידע על נושא כלשהו שקשור ל- GNU / Linux, אני מסתובב ולמצוא תמיד ב 90% מהמקרים את ההדרכה הטובה ביותר בקהילה הנהדרת הזו, אני חושב שמעכשיו אתחיל לכאן ואחר כך במקומות אחרים.

    לגבי

    1.    בואו נשתמש בלינוקס דיג'ו

      תודה סנדר! חיבוק! פול.

  23.   דריו דיג'ו

    dom = יום בחודש
    dow = יום בשבוע
    קל יותר אם אתה מתחבר

  24.   Pascual דיג'ו

    תודה רבה, שלמה מאוד ומוסברת היטב.

  25.   מקסיליה דיג'ו

    זה אותו דבר שהמורה למערכות הפעלה שלי נתן לנו, אני לא משנה כלום, עכשיו אני מבין למה הכיתה כל כך גרועה .- ובכן, זה כמו שיעורי הבית xD

  26.   מרסלו דיג'ו

    מְשׁוֹעָר,

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

    תודה,
    מרסלו.

    1.    בואו נשתמש בלינוקס דיג'ו

      שלום מרסלו!

      אני חושב שעדיף שתעלה את השאלה הזו בשירות השאלות והמענה שלנו לִשְׁאוֹל DesdeLinux כדי שכל הקהילה תוכל לעזור לך בבעיה שלך.

      חיבוק, פבלו.

  27.   aj דיג'ו

    פוסט טוב.
    מהי הפקודה לכל מסוף להוסיף משימות לכביש הראשי (מבלי להיכנס לכביש הראשי ולהוסיף אותן באופן ידני עם 'crontab -e' או להחליף את הכביש המהיר בכניסה אחרת לכונן 'קובץ crontab').
    הרעיון הוא ליצור סקריפט חיצוני כדי להוסיף את המשימות לכרטיסייה
    תודה

    1.    דוד דיג'ו

      נראה לי שתוכל להשתמש ב'הד 'כל מה שתרצה להוסיף' | חתול >> 'נתיב cronotab (/ etc / cronotab)' «

  28.   רפאל ורה דיג'ו

    איך ביטוי ירוץ כל 3 ימים בדיוק

  29.   חוסה אנטוניו דיג'ו

    היי.

    יש לי בעיה לבצע עבודת cron.

    אני מריץ את המשימה הבאה עם cronta -e:

    01 * * * * root /home/user/script/mfile.sh

    אך המשימה לא נעשתה. בדקתי כי ל- myfile.sh יש הרשאת ביצוע וכי המשתמש שמבצע אותה הוא שורש.

    אני מריץ את אותה משימה ב- / etc / crontab ואחרי שהפעלתי מחדש את השירות, זה גם לא עובד בשבילי.
    התוכן של myfile.sh הוא פקודה שמעדכנת DB ואם אני מריץ אותו במסוף זה עובד.
    יש לך מושג מה הבעיה?

    1.    Fredd דיג'ו

      למשתמש מסד הנתונים ייתכן שלא יהיו כל ההרשאות ותצטרך קודם לייצא את משתני הסביבה ממנוע מסד הנתונים שלך.
      לדוגמא ב- db2 שורה זו תעבור לתחילת התסריט
      . / home / db2inst1 / sqllib / db2profile

      סיבה נוספת יכולה להיות שהסקריפט דורש חיבור למסד הנתונים, בצע את החיבור למסד הנתונים בתוך הסקריפט

  30.   LA3 דיג'ו

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

  31.   קניה דיג'ו

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

  32.   ישוע דיג'ו

    יום טוב!!

    כיצד אוכל לעצור את התהליך שמבוצע בכביש הראשי?

  33.   ישוע דיג'ו

    תהליך * …………

  34.   ג'וליאנה דיג'ו

    יכול להיות שאתה יכול לעזור לי? האיחוד האירופי tenho um תסריט מאת minha מחובר שלא עובד בלי crontab! jб dei כל ההרשאות, שום cron ספציפי או משתמש שיכולים לבצע את זה - שום דבר לא קורה! הייתי רוצה לדעת אם אתה יכול לעזור לי, כמה דברים אחרים לא עובדים cron! Vlws

  35.   אנטוקס דיג'ו

    כיצד היית משימה שמופעלת בכל יום אחרון בחודש (ימים: 31-30-28)?

  36.   פרפרו דיג'ו

    כפי שכבר ידוע, הפקודה su משמשת לשינוי המשתמש במסוף. אם אני משתמש בפקודה su כך: "המשתמש שלך" משנה משתמש אך ללא ההגדרות הנכונות של "משתמש", אם אני מריץ את su כ: "משתמש משתמש" שנה משתמש על ידי טעינת הגדרות המשתמש. עם cron אני מציין את המשתמש, אבל איך אוכל לטעון את ההגדרות של משתמש זה?

  37.   לשדוד דיג'ו

    ואם אני רוצה להפסיק את זה?

  38.   רג'י דיג'ו

    שלום,
    אני לא יודע מה אני עושה לא בסדר, אבל אני ממלא אחר הצעדים ושום דבר לא מבוצע. ניסיתי:
    59 * * * * / usr / bin / gedit
    * * * * * / usr / bin / gedit
    * * * * * שורש / usr / bin / gedit
    * * * * * usr / bin / test.sh
    * * * * * שורש usr / bin / test.sh

    ושום דבר בכלל. זה לא מבצע שום דבר. אתחלתי מחדש והכל.

  39.   פרקו דיג'ו

    תודה רבה