شرح Cron & crontab

لوسين نشرت منذ فترة برنامج تعليمي ممتاز على cron و crontab التي أعتقد أنها تستحق المشاركة. يعد Cron نوعًا من المكافئ للمهام المجدولة في Windows، فقط أنه يتم التعامل معها من المحطة. أولئك الذين يفضلون الواجهة المرئية لتحقيق نفس الهدف ، يمكنهم رؤية ذلك عنصر آخر.

ما هو كرون؟

يأتي اسم كرون من الكلمة اليونانية كرونوس والتي تعني "الوقت". في نظام التشغيل Unix ، يعد cron مديرًا عاديًا لمعالجة الخلفية (عفريتًا) يدير العمليات أو البرامج النصية على فترات منتظمة (على سبيل المثال ، كل دقيقة أو يوم أو أسبوع أو شهر). يتم تحديد العمليات التي يجب تنفيذها والوقت الذي يجب تنفيذها فيه في ملف crontab.

أعمال كومو

يبدأ عفريت كرون من /etc/rc.d/ o / الخ / init.d حسب التوزيع. يعمل Cron في الخلفية ، ويتحقق من جدول مهام crontab كل دقيقة / الخ / كرونتاب س و / var / spool / cron بحثا عن المهام المطلوب إنجازها. كمستخدم ، يمكننا إضافة أوامر أو نصوص مع مهام إلى cron لأتمتة بعض العمليات. هذا مفيد على سبيل المثال لأتمتة تحديث نظام أو نظام نسخ احتياطي جيد.

المادة ذات الصلة:
البرنامج التعليمي: قم بتثبيت حزمتي .tar.gz و .tar.bz2

ما هو كرونتاب؟

Crontab هو ملف نصي بسيط يخزن قائمة من الأوامر ليتم تنفيذها في وقت يحدده المستخدم. سيتحقق Crontab من تاريخ ووقت تنفيذ البرنامج النصي أو الأمر ، وأذونات التنفيذ وسيقوم بذلك في الخلفية. يمكن لكل مستخدم الحصول على ملف crontab الخاص به ، في الواقع ملف / الخ / كرونتاب يُفترض أنه ملف crontab الخاص بالمستخدم الجذر ، عندما يريد المستخدمون العاديون (وحتى الجذر) إنشاء ملف crontab الخاص بهم ، فسنستخدم الأمر crontab.

Crontab هي أسهل طريقة لإدارة مهام cron على أنظمة متعددة المستخدمين ، إما كمستخدم نظام بسيط أو مستخدم جذر.

باستخدام كرونتاب

نبدأ بمثال بسيط.

سنعمل على أتمتة تحديث النظام ، للتخلص من الإزعاج المتمثل في "يتعين علي دائمًا التحديث ولا يعجبني ذلك!"

المادة ذات الصلة:
أوامر لمعرفة النظام (تحديد الأجهزة وبعض تكوينات البرامج)

بادئ ذي بدء ، سنقوم بعمل نص. سيتم استدعاء هذا البرنامج النصي من قبل cron وسيحتوي على جميع التعليمات التي نريده أن يفعلها ، لذلك من الضروري اختباره في عدة حالات وبعدة طرق قبل تضمينه في cron ، وهو نص تحديث بسيط مثل هذا:

#! / bin / bash #script update example #choose your Distribution # debian-ubuntu # apt-get update & apt-get -y Upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

قم بإزالة # من خط التوزيع الخاص بك. في حالة وجود Ubuntu / Debian ، فإنه يبدأ بـ apt-get.

نحفظ البرنامج النصي باسم update.sh (على سبيل المثال ، دليل البرامج النصية في منزلك). نقوم بتغيير أذونات التنفيذ للبرنامج النصي المذكور باستخدام:

chmod a + x ~ / scripts / update.sh

نقوم بتنفيذ البرنامج النصي عدة مرات للتحقق من أن كل شيء يعمل بسلاسة ، ونقوم بتعديل ما هو ضروري (يجب ألا يحتوي على أخطاء ، وإلا فإن cron لن يقوم إلا بتكرار الخطأ مرارًا وتكرارًا). الآن لإضافة المهمة إلى crontab الخاص بنا.

أضف المهام إلى crontab

نقوم بتنفيذ إصدار crontab باستخدام crontab -e ، في بعض التوزيعات (مثل Ubuntu) يمنحنا خيار اختيار محرر النص الذي نريده ، والباقي يتبقى لنا vi. سيبدو ملف crontab بهذا الشكل.

# mh dom mon dow أمر المستخدم

حيث:

  • m يتوافق مع الدقيقة التي سيتم فيها تنفيذ البرنامج النصي ، وتتراوح القيمة من 0 إلى 59
  • h في الوقت المحدد ، يتم التعامل مع تنسيق 24 ساعة ، وتتراوح القيم من 0 إلى 23 ، بحيث يكون الرقم 0 هو 12:00 منتصف الليل.
  • دوم يشير إلى يوم من الشهر ، على سبيل المثال يمكنك تحديد 15 إذا كنت تريد تشغيل كل 15 يومًا
  • اتجاه يعني يوم الأسبوع ، يمكن أن يكون رقميًا (من 0 إلى 7 ، حيث يكون 0 و 7 يوم الأحد) أو أول 3 أحرف من اليوم باللغة الإنجليزية: الاثنين ، الثلاثاء ، الأربعاء ، الخميس ، الجمعة ، السبت ، الشمس.
  • المستخدم يحدد المستخدم الذي سينفذ الأمر ، يمكن أن يكون جذرًا ، أو مستخدمًا مختلفًا طالما أن لديهم أذونات لتنفيذ البرنامج النصي.
  • أمر يشير إلى الأمر أو المسار المطلق للبرنامج النصي المراد تنفيذه ، على سبيل المثال: /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 update root user

سيتم تشغيل تحديث كل يوم أحد في الساعة 10:00 صباحًا

تحديث 45 10 * * sun root apt-get -y

سيقوم مستخدم الجذر بتشغيل تحديث كل يوم أحد (الأحد) الساعة 10:45 صباحًا

30 7 20 11 * user /home/usuario/scripts/updata.sh

في 20 نوفمبر في تمام الساعة 7:30 ، سيقوم المستخدم بتشغيل البرنامج النصي

30 7 11 11 sun user /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 XNUMX XNUMX

في الساعة 12 ظهرًا في الأول والخامس عشر والثامن والعشرين من كل شهر (مثالي لكشوف المرتبات)

إذا كان هذا محيرًا ، فإن مقابض crontab سلاسل خاصة لتحديد هذه النطاقات.

@ reboot تشغيل مرة واحدة عند بدء التشغيل
يتم تشغيل @ سنويًا مرة واحدة فقط في السنة: 0 0 1 1 *
annually مثلyearly
يتم تشغيلmonthly مرة واحدة في الشهر ، في اليوم الأول: 0 0 1 * *
weekly Weekly الدقيقة الأولى من الساعة الأولى من الأسبوع. 0 0 * * 0 ″.
daily يوميًا ، الساعة 12:00 صباحًا. 0 0 * * *
midnight نفسdaily
@ ساعة في الدقيقة الأولى من كل ساعة: 0 * * * *

استخدامه بسيط جدا.

hourly user /home/user/scripts/molestorecordatorio.shmonthly user /home/user/scripts/backup.shdaily root apt-get update && apt-get -y Upgrade

اخيرا وليس اخرا:

إدارة وظائف Cron

ملف crontab

استبدل ملف crontab الحالي بملف معرف من قبل المستخدم

-e كرونتاب

قم بتحرير ملف crontab الخاص بالمستخدم ، كل سطر جديد سيكون مهمة crontab جديدة.

crontab -l

قائمة بجميع مهام المستخدم crontab

كرونتاب د

احذف ملف crontab الخاص بالمستخدم

crontab -c دير

يحدد دليل crontab للمستخدم (يجب أن يكون لهذا المستخدم أذونات كتابة وتنفيذ)

مستخدم crontab -u

بادئة للتعامل مع crontab لمستخدم آخر ، أمثلة:

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

يمكن رؤية هذه الأداة ، مثل العديد من الأدوات الأخرى ، بمزيد من العمق والتفصيل في:

شكرا لوسين!

محتوى المقال يلتزم بمبادئنا أخلاقيات التحرير. للإبلاغ عن خطأ انقر فوق هنا.

48 تعليقات ، اترك لك

اترك تعليقك

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها ب *

*

*

  1. المسؤول عن البيانات: ميغيل أنخيل جاتون
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  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.   صياد قال

    ممتاز ، شكرًا لتوضيح كيفية عمل cron .. لنضع يدًا صغيرة 🙂

  6.   يعقوب قال

    سيتم تنفيذ هذا السطر كما أفهم في الساعة 10:15 مساءً ، صححني إذا كنت مخطئًا
    حسنًا هناك تقول 10:15 صباحًا
    15 22 * * * user /home/user/scripts/update.sh

  7.   اجوستين قال

    مرحبا! معلومات جيدة جدا.
    لتنفيذ برنامج نصي كل نصف ساعة ، فإن السطر الذي يجب إضافته إلى CronTab سيكون: "30 * * * * root Scrip.sh" صحيح؟ شكرا جزيلا!

  8.   دعنا نستخدم لينكس قال

    لا. إذا كنت أتذكر بشكل صحيح ، يجب أن تضع / 30 * * * * root 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/mi_user/Desktop/script.sh"

      قد تختلف المعلمة التي يجب استخدامها بناءً على محاكي المحطة الذي تستخدمه.

      أتمنى أن يعمل.

      عناق! بول.

  10.   باتريتكاس قال

    مدخلات تقدير.

    10 نقاط !!

    salu2 !!

  11.   رودولفو قال

    شكرًا جزيلاً لك ، لقد ساعدني كثيرًا في توضيح بعض الأشياء ، شكرًا جزيلاً ، لمزيد من التفاصيل أو الأسئلة ، سأذهب إلى صفحة MAN ، تحياتي المتكررة.

  12.   جاهر قال

    العم شكرا جزيلا لك ، لقد قرأت واختبر الأمثلة. شكرا جزيلا لك ... هذا مفهوم جدا. في صحتك

  13.   جيوفاني قال

    لقد استخدمت ubuntu Server 12.04.2 LTS ، ويتم استخدام إصدار crontab الذي أملكه لحذف قائمة وظائف المستخدم ، crontab -r (و -l ، كما يقول هذا الدليل). بالتأكيد هو من خلال مسألة الإصدارات.

    من ناحية أخرى ، قمت مرة بتشغيل crontab فقط وهذا النوع من السماح لي بإنشاء ملف التنفيذ الخاص بي ، لكن هذا لم يكن الملف الذي تم تنفيذه. الذي يتم تشغيله هو الموجود في / etc / crontab. ربما شخص ما سيستخدم التعليق.

    PS (لقد بحثت باستخدام locate و whereis crontab ولكنه أعاد فقط العنوان المذكور أعلاه وملفًا آخر مشفرًا ، لذلك إذا كان الملف الذي تم تنفيذه هو الملف / etc / crontab ، ولكن عند تنفيذ الأمر crontab -e ، ظهر لي مع جميع الوظائف التي حددتها) أين تم تخزين هذا الملف '؟؟؟؟ مع تحياتي. أنا دائما أسجل الدخول مع الجذر.

  14.   سيباستيان قال

    ممتاز ومفيد جدا !!!

  15.   MMM قال

    مرحبًا ، أود أن أفعل هذا ………… «15 10 * * * root ifdown eth0»

    أي ، في وقت معين تنطفئ بطاقة الشبكة .......... حسنًا ، وضعتها في crontab ولم تنجح ......... ما الأمر؟

    Saludos Y جراسياس

  16.   ميغيل قال

    فاتك تحديد "mon" بعد العنوان "Add Task to crontab"

    المقال لا يزال لطيفًا ، كرون مفيد للغاية.

  17.   أوسكار قال

    كم كان هذا المنشور جيداً ، اسألني
    إذا كنت أرغب في تتبع السجلات التي خلفها تنفيذ المهام ، فأين يمكنني رؤيتها؟

    هو أن أقرر أريد أن أرى محفوظات الإجراءات التي تمت في الماضي من هذا الملف وأريد أن أرى من قام بتعديله والتاريخ

    شكر

  18.   أوسكار قال

    أريد التحقق من تاريخ التعديل لهذا

    كيف يمكنني فعل ذلك

    شكر

  19.   أندريس ليدو قال

    صباح الخير،

    أعتقد أنك ارتكبت خطأ في نص ubuntu ، لقد وضعت ترقية ap-get -y بدلاً من apt-get -y Upgrade. (لقد تركت ر).

    تحية.

    1.    دعنا نستخدم لينكس قال

      هكذا هو. شكرا!
      عناق! بول

  20.   غابرييل قال

    أريد أن أعرف كيفية إنشاء ملف cron لأتمكن من تحديد الوقت الذي يتم فيه تنفيذه والدليل وما إلى ذلك.

  21.   عيد الحب قال

    شكرًا لتوضيح العملية والأوامر الأساسية لـ cron ، الآن للترفيه عن نفسك قليلاً.

  22.   ساندر قال

    كلما بحثت عن معلومات حول أي موضوع متعلق بـ Gnu / Linux ، أذهب وأجول لأجد دائمًا في 90٪ من الحالات أفضل برنامج تعليمي في هذا المجتمع الرائع ، أعتقد أنه من الآن فصاعدًا سأبدأ هنا ثم في مكان آخر.

    تحياتي

    1.    دعنا نستخدم لينكس قال

      شكرا ساندر! عناق! بول.

  23.   داريو قال

    dom = يوم من الشهر
    داو = يوم من الأسبوع
    من الأسهل إذا قمت بربط

  24.   فصحى قال

    شكرا جزيلا لك ، كاملة جدا وموضحة جيدا.

  25.   الفك قال

    هذا هو نفس الشيء الذي قدمه لنا مدرس أنظمة التشغيل ، فأنا لا أغير أي شيء ، والآن أرى سبب سوء الصف. -.

  26.   مارسيلو قال

    عزيزي،

    استعلام ، هل يمكن تحديد المدة الزمنية للمهمة؟
    على سبيل المثال ، لدي مهمة تتكرر كل 5 دقائق ، عند التكرار إذا كانت هذه المهمة لا تزال نشطة ، فقم بإيقافها وتشغيلها مرة أخرى.

    شكرا،
    مارسيلو. -

    1.    دعنا نستخدم لينكس قال

      مرحبا مارسيلو!

      أعتقد أنه سيكون من الأفضل أن تطرح هذا السؤال في خدمة الأسئلة والأجوبة لدينا المسماة اسأل من لينكس حتى يتمكن المجتمع بأكمله من مساعدتك في حل مشكلتك.

      عناق ، بابلو.

  27.   aj قال

    وظيفة جيدة.
    ما هو الأمر لكل محطة لإضافة مهام إلى crontab (بدون إدخال crontab وإضافتها يدويًا باستخدام crontab -e أو استبدال crontab بـ crontab آخر بـ 'crontab file').
    الفكرة هي إنشاء نص خارجي لإضافة المهام إلى crontab
    شكرا

    1.    ديفيد قال

      أعتقد أنه يمكنك استخدام "صدى" ما تريد إضافته "| قط >> 'مسار cronotab (/ etc / cronotab)' «

  28.   رافائيل فيرا قال

    كيف سيتم تشغيل التعبير كل 3 أيام بالضبط

  29.   خوسيه أنطونيو قال

    مهلا.

    لدي مشكلة في تنفيذ وظيفة كرون.

    أقوم بتشغيل المهمة التالية مع cronta -e:

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

    لكن المهمة لم تتم. لقد تحققت من أن myfile.sh لديه إذن التنفيذ وأن المستخدم الذي يقوم بتنفيذه هو الجذر.

    أقوم بتشغيل نفس المهمة في / etc / crontab وبعد إعادة تشغيل الخدمة ، فإنها لا تعمل معي أيضًا.
    محتوى myfile.sh هو أمر يقوم بتحديث قاعدة بيانات وإذا قمت بتشغيله في وحدة التحكم فإنه يعمل.
    اي فكرة ما هي المشكلة؟

    1.    فريد قال

      من المحتمل أن مستخدم قاعدة البيانات ليس لديه جميع الأذونات وسيتعين عليك أولاً تصدير متغيرات البيئة من محرك قاعدة البيانات.
      على سبيل المثال في db2 ، ينتقل هذا السطر إلى بداية البرنامج النصي
      . / home / db2inst1 / sqllib / db2profile

      قد يكون السبب الآخر هو أن البرنامج النصي يتطلب الاتصال بقاعدة البيانات ، قم بإجراء الاتصال بقاعدة البيانات داخل البرنامج النصي

  30.   LA3 قال

    لم أكن أعلم أنه كان عليّ إعادة تشغيل الكاهن ، فقد كنت أقاتل مع هذا لفترة من الوقت

  31.   كينيا قال

    سيعرفون كيف يشيرون إلى أن المهمة يتم تشغيلها كل نهاية الشهر ، في الوقت المشار إليه .. التفاصيل هي أنني لا أستطيع تحقيق كيف أعرف أن يستغرق اليوم الأخير من كل شهر .. ؟؟؟ اضطررت إلى كتابتها واحدة تلو الأخرى ، لكن عندما تأتي نهاية شهر فبراير ، يكون الأمر أكثر صعوبة بالنسبة لي ..

  32.   يسوع قال

    يوم جيد!!

    كيف يمكنني إيقاف العملية التي يتم تنفيذها في crontab؟

  33.   يسوع قال

    معالجة * …………

  34.   جوليانا قال

    هل يمكن أن يكون بإمكانك مساعدتي؟ eu tenho um النصي من تأليف minha الذي لا يعمل لا crontab! jб dei جميع التصاريح ، لا يوجد cron محدد خاص أو مستخدم يمكنه تنفيذه - لا يحدث شيء! أود أن أعرف ما إذا كان بإمكانك مساعدتي ، فبعض الأشياء الأخرى لا تعمل بدون كرون! Vlws

  35.   أنتوكس قال

    كيف تضع مهمة ليتم تشغيلها في آخر يوم من الشهر (الأيام: 31-30-28)؟

  36.   تفيرتشو قال

    كما تعلم بالفعل ، يتم استخدام الأمر su لتغيير المستخدم في وحدة التحكم. إذا استخدمت الأمر su ، فقم بتغيير المستخدم ولكن بدون الإعدادات المناسبة لـ "user" ، إذا قمت بتشغيل su كـ: "su - user" فغيّر المستخدم عن طريق تحميل إعدادات المستخدم. باستخدام cron ، أشير إلى المستخدم ، ولكن كيف يمكنني تحميل إعدادات هذا المستخدم؟

  37.   سلب قال

    وإذا كنت أريد أن أوقفه؟

  38.   انضم قال

    مرحبا،
    لا أعرف الخطأ الذي أفعله ، لكني أتبع الخطوات ولا يتم تنفيذ أي شيء. لقد حاولت:
    59 * * * * / usr / bin / gedit
    * * * * * / usr / bin / gedit
    * * * * * root / usr / bin / gedit
    * * * * * usr / bin / test.sh
    * * * * * root usr / bin / test.sh

    ولا شيء على الاطلاق. لا تنفذ أي شيء. لقد قمت بإعادة التشغيل وكل شيء.

  39.   فرقوس قال

    شكرا جزيلا