لوسين نشرت منذ فترة برنامج تعليمي ممتاز على cron و crontab التي أعتقد أنها تستحق المشاركة. يعد Cron نوعًا من المكافئ للمهام المجدولة في Windows، فقط أنه يتم التعامل معها من المحطة. أولئك الذين يفضلون الواجهة المرئية لتحقيق نفس الهدف ، يمكنهم رؤية ذلك عنصر آخر. |
ما هو كرون؟
يأتي اسم كرون من الكلمة اليونانية كرونوس والتي تعني "الوقت". في نظام التشغيل Unix ، يعد cron مديرًا عاديًا لمعالجة الخلفية (عفريتًا) يدير العمليات أو البرامج النصية على فترات منتظمة (على سبيل المثال ، كل دقيقة أو يوم أو أسبوع أو شهر). يتم تحديد العمليات التي يجب تنفيذها والوقت الذي يجب تنفيذها فيه في ملف crontab.
أعمال كومو
يبدأ عفريت كرون من /الخ/rc.d/ o / الخ / init.d حسب التوزيع. يعمل Cron في الخلفية ، ويتحقق من جدول مهام crontab كل دقيقة / الخ / كرونتاب س و / var / spool / cron بحثا عن المهام المطلوب إنجازها. كمستخدم ، يمكننا إضافة أوامر أو نصوص مع مهام إلى cron لأتمتة بعض العمليات. هذا مفيد على سبيل المثال لأتمتة تحديث نظام أو نظام نسخ احتياطي جيد.
ما هو كرونتاب؟
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
يمكن رؤية هذه الأداة ، مثل العديد من الأدوات الأخرى ، بمزيد من العمق والتفصيل في:
آه ... محيرة بعض الشيء.
* / 30 مفقود (في حقل الدقائق) يتم تشغيله كل 30 دقيقة ...
هذا فقط كنت سأعلق حتى قررت مراجعة التعليقات
يعد هذا المعدل جزءًا مهمًا جدًا من المعلومات وشيء مفيد للغاية.
مرحبا!
الآن أقوم باختبار التكوين كل 45 دقيقة.
* / 45 * * * * ، ويتم تنفيذ التعليمات في 45 دقيقة من كل ساعة وكل ساعة. ذلك بالقول:
يتم تشغيله في 3:45 ، ثم 4:00 ، 4:45 ، ثم 5:00 ، 5:45 ، 6:00 ، 6:45 ، وهكذا.
لدي شيء خاطئ ما الذي يمكنني فعله بحيث يكون كل 45 دقيقة فقط ، أو مرة واحدة على الأقل كل 45 دقيقة كل ساعة.
مرحبا!
الآن أقوم باختبار التكوين كل 45 دقيقة.
* / 45 * * * * ، ويتم تنفيذ التعليمات في 45 دقيقة من كل ساعة وكل ساعة. ذلك بالقول:
يتم تشغيله في 3:45 ، ثم 4:00 ، 4:45 ، ثم 5:00 ، 5:45 ، 6:00 ، 6:45 ، وهكذا.
لدي شيء خاطئ ما الذي يمكنني فعله بحيث يكون كل 45 دقيقة فقط ، أو مرة واحدة على الأقل كل 45 دقيقة كل ساعة.
مرحبًا ، هذه المعلومات مفيدة للغاية لتوضيح كيفية عمل cron.
بايت
إلى عن على *
ممتاز ، شكرًا لتوضيح كيفية عمل cron .. لنضع يدًا صغيرة 🙂
سيتم تنفيذ هذا السطر كما أفهم في الساعة 10:15 مساءً ، صححني إذا كنت مخطئًا
حسنًا هناك تقول 10:15 صباحًا
15 22 * * * user /home/user/scripts/update.sh
مرحبا! معلومات جيدة جدا.
لتنفيذ برنامج نصي كل نصف ساعة ، فإن السطر الذي يجب إضافته إلى CronTab سيكون: "30 * * * * root Scrip.sh" صحيح؟ شكرا جزيلا!
لا. إذا كنت أتذكر بشكل صحيح ، يجب أن تضع / 30 * * * * root Scrip.sh.
أي ، أضف / قبل 30.
في صحتك! بول.
مرحبًا ، أعجبتني منشورك ، فهو مكتمل جدًا ولكني أردت أن أسألك شيئًا.
أواجه مشكلة مع هذا الأمر وواحد مثل "في".
أريد أن أشغل سيناريو في وقت معين وأضعه
في -f /home/mi_user/Desk/script.sh 18:08 مثال
ولا يتم تنفيذ البرنامج النصي على الشاشة ، أي في الجهاز ، هل يتم تنفيذه في الخلفية؟
ومع cron يحدث لي نفس الشيء ، أقوم بتعديل ملف crontab باستخدام "crontab -e"
في النهاية أقوم بإضافة هذا السطر:
46 19 my_user /home/mi_user/Desk/script.sh
ولا يفعل شيئًا ، فهو لا يُظهر النص.
أي اقتراح؟ شكرا جزيلا لك واعتذر عن أي إزعاج
لكي تظهر المحطة ، قد تضطر إلى تشغيل الجهاز وتمرير النص كمعامل.
على سبيل المثال:
lxterminal -e "my_user /home/mi_user/Desktop/script.sh"
قد تختلف المعلمة التي يجب استخدامها بناءً على محاكي المحطة الذي تستخدمه.
أتمنى أن يعمل.
عناق! بول.
مدخلات تقدير.
10 نقاط !!
أهلا 2 !!
شكرًا جزيلاً لك ، لقد ساعدني كثيرًا في توضيح بعض الأشياء ، شكرًا جزيلاً ، لمزيد من التفاصيل أو الأسئلة ، سأذهب إلى صفحة MAN ، تحياتي المتكررة.
العم شكرا جزيلا لك ، لقد قرأت واختبر الأمثلة. شكرا جزيلا لك ... هذا مفهوم جدا. في صحتك
لقد استخدمت ubuntu Server 12.04.2 LTS ، ويتم استخدام إصدار crontab الذي أملكه لحذف قائمة وظائف المستخدم ، crontab -r (و -l ، كما يقول هذا الدليل). بالتأكيد هو من خلال مسألة الإصدارات.
من ناحية أخرى ، قمت مرة بتشغيل crontab فقط وهذا النوع من السماح لي بإنشاء ملف التنفيذ الخاص بي ، لكن هذا لم يكن الملف الذي تم تنفيذه. الذي يتم تشغيله هو الموجود في / etc / crontab. ربما شخص ما سيستخدم التعليق.
PS (لقد بحثت باستخدام locate و whereis crontab ولكنه أعاد فقط العنوان المذكور أعلاه وملفًا آخر مشفرًا ، لذلك إذا كان الملف الذي تم تنفيذه هو الملف / etc / crontab ، ولكن عند تنفيذ الأمر crontab -e ، ظهر لي مع جميع الوظائف التي حددتها) أين تم تخزين هذا الملف '؟؟؟؟ مع تحياتي. أنا دائما أسجل الدخول مع الجذر.
ممتاز ومفيد جدا !!!
مرحبًا ، أود أن أفعل هذا ………… «15 10 * * * root ifdown eth0»
أي ، في وقت معين تنطفئ بطاقة الشبكة .......... حسنًا ، وضعتها في crontab ولم تنجح ......... ما الأمر؟
Saludos Y جراسياس
فاتك تحديد "mon" بعد العنوان "Add Task to crontab"
المقال لا يزال لطيفًا ، كرون مفيد للغاية.
كم كان هذا المنشور جيداً ، اسألني
إذا كنت أرغب في تتبع السجلات التي خلفها تنفيذ المهام ، فأين يمكنني رؤيتها؟
هو أن أقرر أريد أن أرى محفوظات الإجراءات التي تمت في الماضي من هذا الملف وأريد أن أرى من قام بتعديله والتاريخ
شكر
أريد التحقق من تاريخ التعديل لهذا
كيف يمكنني فعل ذلك
شكر
صباح الخير،
أعتقد أنك ارتكبت خطأ في نص ubuntu ، لقد وضعت ترقية ap-get -y بدلاً من apt-get -y Upgrade. (لقد تركت ر).
تحية.
هكذا هو. شكرا!
عناق! بول
أريد أن أعرف كيفية إنشاء ملف cron لأتمكن من تحديد الوقت الذي يتم فيه تنفيذه والدليل وما إلى ذلك.
شكرًا لتوضيح العملية والأوامر الأساسية لـ cron ، الآن للترفيه عن نفسك قليلاً.
كلما بحثت عن معلومات حول أي موضوع متعلق بـ Gnu / Linux ، أذهب وأجول لأجد دائمًا في 90٪ من الحالات أفضل برنامج تعليمي في هذا المجتمع الرائع ، أعتقد أنه من الآن فصاعدًا سأبدأ هنا ثم في مكان آخر.
تحياتي
شكرا ساندر! عناق! بول.
dom = يوم من الشهر
داو = يوم من الأسبوع
من الأسهل إذا قمت بربط
شكرا جزيلا لك ، كاملة جدا وموضحة جيدا.
هذا هو نفس الشيء الذي قدمه لنا مدرس أنظمة التشغيل ، فأنا لا أغير أي شيء ، والآن أرى سبب سوء الصف. -.
عزيزي،
استعلام ، هل يمكن تحديد المدة الزمنية للمهمة؟
على سبيل المثال ، لدي مهمة تتكرر كل 5 دقائق ، عند التكرار إذا كانت هذه المهمة لا تزال نشطة ، فقم بإيقافها وتشغيلها مرة أخرى.
شكرا،
مارسيلو. -
مرحبا مارسيلو!
أعتقد أنه سيكون من الأفضل أن تطرح هذا السؤال في خدمة الأسئلة والأجوبة لدينا المسماة اسأل فروملينكس حتى يتمكن المجتمع بأكمله من مساعدتك في حل مشكلتك.
عناق ، بابلو.
وظيفة جيدة.
ما هو الأمر لكل محطة لإضافة مهام إلى crontab (بدون إدخال crontab وإضافتها يدويًا باستخدام crontab -e أو استبدال crontab بـ crontab آخر بـ 'crontab file').
الفكرة هي إنشاء نص خارجي لإضافة المهام إلى crontab
شكرا
أعتقد أنه يمكنك استخدام "صدى" ما تريد إضافته "| قط >> 'مسار cronotab (/ etc / cronotab)' «
كيف سيتم تشغيل التعبير كل 3 أيام بالضبط
مهلا.
لدي مشكلة في تنفيذ وظيفة كرون.
أقوم بتشغيل المهمة التالية مع cronta -e:
01 * * * * root /home/user/script/mfile.sh
لكن المهمة لم تتم. لقد تحققت من أن myfile.sh لديه إذن التنفيذ وأن المستخدم الذي يقوم بتنفيذه هو الجذر.
أقوم بتشغيل نفس المهمة في / etc / crontab وبعد إعادة تشغيل الخدمة ، فإنها لا تعمل معي أيضًا.
محتوى myfile.sh هو أمر يقوم بتحديث قاعدة بيانات وإذا قمت بتشغيله في وحدة التحكم فإنه يعمل.
اي فكرة ما هي المشكلة؟
من المحتمل أن مستخدم قاعدة البيانات ليس لديه جميع الأذونات وسيتعين عليك أولاً تصدير متغيرات البيئة من محرك قاعدة البيانات.
على سبيل المثال في db2 ، ينتقل هذا السطر إلى بداية البرنامج النصي
. / home / db2inst1 / sqllib / db2profile
قد يكون السبب الآخر هو أن البرنامج النصي يتطلب الاتصال بقاعدة البيانات ، قم بإجراء الاتصال بقاعدة البيانات داخل البرنامج النصي
لم أكن أعلم أنه كان عليّ إعادة تشغيل الكاهن ، فقد كنت أقاتل مع هذا لفترة من الوقت
سيعرفون كيف يشيرون إلى أن المهمة يتم تشغيلها كل نهاية الشهر ، في الوقت المشار إليه .. التفاصيل هي أنني لا أستطيع تحقيق كيف أعرف أن يستغرق اليوم الأخير من كل شهر .. ؟؟؟ اضطررت إلى كتابتها واحدة تلو الأخرى ، لكن عندما تأتي نهاية شهر فبراير ، يكون الأمر أكثر صعوبة بالنسبة لي ..
يوم جيد!!
كيف يمكنني إيقاف العملية التي يتم تنفيذها في crontab؟
معالجة * …………
هل يمكن أن يكون بإمكانك مساعدتي؟ eu tenho um النصي من تأليف minha الذي لا يعمل لا crontab! jб dei جميع التصاريح ، لا يوجد cron محدد خاص أو مستخدم يمكنه تنفيذه - لا يحدث شيء! أود أن أعرف ما إذا كان بإمكانك مساعدتي ، فبعض الأشياء الأخرى لا تعمل بدون كرون! Vlws
كيف تضع مهمة ليتم تشغيلها في آخر يوم من الشهر (الأيام: 31-30-28)؟
كما تعلم بالفعل ، يتم استخدام الأمر su لتغيير المستخدم في وحدة التحكم. إذا استخدمت الأمر su ، فقم بتغيير المستخدم ولكن بدون الإعدادات المناسبة لـ "user" ، إذا قمت بتشغيل su كـ: "su - user" فغيّر المستخدم عن طريق تحميل إعدادات المستخدم. باستخدام cron ، أشير إلى المستخدم ، ولكن كيف يمكنني تحميل إعدادات هذا المستخدم؟
وإذا كنت أريد أن أوقفه؟
مرحبا،
لا أعرف الخطأ الذي أفعله ، لكني أتبع الخطوات ولا يتم تنفيذ أي شيء. لقد حاولت:
59 * * * * / usr / bin / gedit
* * * * * / usr / bin / gedit
* * * * * root / usr / bin / gedit
* * * * * usr / bin / test.sh
* * * * * root usr / bin / test.sh
ولا شيء على الاطلاق. لا تنفذ أي شيء. لقد قمت بإعادة التشغيل وكل شيء.
شكرا جزيلا