English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
يُستخدم crontab في Linux لتنفيذ البرامج بشكل دوري.
بعد تثبيت نظام التشغيل، يتم تشغيل الأمر المخطط مسبقًا بشكل افتراضي.
يقوم الأمر crond بفحص بانتظام كل دقيقة ما إذا كان هناك عمل يتعين تنفيذه، ويقوم بتنفيذ العمل تلقائيًا إذا كان موجودًا.
ملاحظة:الوظائف الجديدة التي يتم إنشاؤها في cron لن تنفذ على الفور،بل يجب أن تمر على الأقل 2 دقيقة،بالطبع يمكنك إعادة تشغيل cron للتنفيذ الفوري.
ويعمل تنظيم المهام في Linux بشكل رئيسي في فئتين:
crontab [ -u user ] file
أو
crontab [ -u user ] { -l | -r | -e }
شرح:
crontab يُستخدم لتمكين المستخدمين من تنفيذ البرامج في أوقات محددة أو في فترات زمنية محددة،بمعنى آخر،هو جدول الزمني للمستخدم.
-u user يشير إلى تعيين جدول الزمني للمستخدم المحدد،هذا يتطلب أن يكون لديك صلاحيات المستخدم (مثل root) لتعيين جدول الزمني للآخرين. إذا لم تستخدم -u user،فسيكون ذلك يعني تعيين جدول الزمني الخاص بك.
شرح المعلمات:
تنسيق الوقت كما يلي:
f1 f2 f3 f4 f5 program
* * * * * - - - - - | | | | | | | | | +----- اليوم من الأسبوع (0 - 6) (الأحد هو 0) | | | +---------- الشهر (1 - 12) | | +--------------- اليوم من الشهر (1 - 31) | +-------------------- الساعات (0 - 23) +------------------------- الدقائق (0 - 59)
يمكن للمستخدم أيضًا حفظ جميع الإعدادات أولاً في ملف، واستخدام طريقة crontab file لتعيين وقت التنفيذ.
كل دقيقة تنفذ الأمر /bin/ls
كل دقيقة تنفذ الأمر /bin/ls
في الشهر ال12، كل يوم من الساعة 06:00 إلى الساعة 12:00، تنفذ الأمر /usr/bin/backup كل 3 ساعات في الدقيقة 00
كل 3 ساعات من الساعة 06:00 إلى الساعة 12:00 في الشهر ال12، تنفذ الأمر /usr/bin/backup
كل يوم من الإثنين إلى الجمعة في الساعة 17:00 يرسل بريدًا إلى [email protected]:
كل يوم من الإثنين إلى الجمعة في الساعة 17:00 يرسل بريدًا إلى [email protected] مع موضوع "hi" من ملف /tmp/maildata
كل يوم من كل شهر في منتصف الليل الساعة 00:20، 02:20، 04:20،... تنفذ الأمر echo "haha":
كل 2 ساعات من الساعة 20:00 إلى الساعة 23:00 في كل يوم تنفذ الأمر echo "haha"
دعونا نرى بعض الأمثلة المحددة:
كل ساعتين في الساعة 00:00 إعادة تشغيل apache كل يوم في الساعة 07:50 تشغيل خدمة ssh كل يوم في الساعة 22:50 إيقاف خدمة ssh كل شهر في الأول والخامس في الساعة 00:00 فحص قرص /home كل ساعة في الدقيقة الأولى تنفذ ملف /home/bruce/backup كل يوم من الإثنين إلى الجمعة الساعة 03:00، في مجلد /home، البحث عن ملفات تسمى *.xxx، وإزالة الملفات التي تكون قديمة 4 أيام. 30 6 */10 * * ls يعني تنفيذ أمر ls مرة واحدة في الساعة 6:30 كل شهر في الـ 1، 11، 21، 31
ملاحظة:بعد تنفيذ البرنامج في الوقت المحدد الذي قمت بتحديده، سيبعث النظام برسالة بريد إلكتروني إلى المستخدم الحالي، يظهر فيها محتوى تنفيذ البرنامج، إذا لم تكن ترغب في استقبال مثل هذه الرسائل، فأضف > /dev/null 2>&1 بعد كل سطر فارغ، مثلًا:
20 03 * * * . /etc/profile;/bin/sh /var/www/w3codebox/test.sh > /dev/null 2>&1
إذا استخدمنا crontab لتشغيل سكربتات التوقيت، فإنها لا يمكن تنفيذها، ولكن إذا تم تنفيذها مباشرة عن طريق الأمر (مثل: ./test.sh) يمكن تنفيذها بشكل طبيعي، هذا بسبب عدم القدرة على قراءة متغيرات البيئة.
حل المشكلة:
1-كل أمر يجب أن يكون بطريقة المسار الكامل، مثل: /usr/local/bin/docker.
2-استخدام الكود التالي في بداية سكربت الشل:
#!/bin/sh . /etc/profile . ~/.bash_profile
3-في /etc/crontab إضافة متغيرات البيئة، قبل أمر القابلية للتنفيذ أضف الأمر . /etc/profile;/bin/sh، لجعل متغيرات البيئة تنجح، مثلًا:
20 03 * * * . /etc/profile;/bin/sh /var/www/w3codebox/test.sh