سندرس اليوم شيئا طالما تساءل البعض عنه
وهو استخدام تقنية cron وتشغيل ملفات php من تلقاء نفسها بدون الحاجة الى الاستدعاء
تستخدم تقنية cron لانشاء مهام مجدوله للسيرفر وهو يعنى انك ستكون لديك قدرة بعمل تشغيل لسكربتك كل ساعه او كل دقيقه أو كل أسبوع ... الخ , بصورة تلقائية بدون الحاجه الى تنفيذها يدويا.
أنت كمبرمج استخدام لتقنية cron سيكون فى عملية maintenance والتى تختص بالاصلاح والبحث عن الاخطاء وتدور حول كفاءة السكربت وجودتة.
يتخلص محور حديثنا على ما يلى :
- ما هى cron
- طريقة استخدام cron فى CPanel
- بنية أمر cron
- cron تفصيلا فى php
- أمثلة على استخدام cron
- مصادر cron
هى الأداه الأكثر فعاليه فى تشغيل السكربتات اوتوماتيكيا بدون تدخل المستخدم عن طريق مهام مجدوله ومحدده بتاريخ التنفيذ ومعدل التكرار بصفه دورية أى تنفيذ الكود كل ساعه أو كل يوم ... الخ
يذكر أن المهمه الأساسيه للcron هى تنفيذ أوامر لينكس على السيرفرات بصفه دورية فمثلا تنفيذ أمر لتفريغ مجلد temp تلقائيا كل أسبوع حتى لا يتسبب فى تضخم فى حجم استهلاك القرص
وعادة الاستخدام الشائع لل cron فى php هو فى اجراء العمليات الخاصه بالصيانه الخاصه بالسكربت وقواعد البيانات فيمكنك برمجة صفحة يتم تنفيذها كل أسبوع تقوم بتصحيح الأخطاء فى ملفات الأعضاء ... الخ
تسمى تلك التقنيه ب cron فى سيرفرات لينكس أما بوندوز فتسمى ب scheduler
طريقة استخدام cron فى CPanel :
اذا كنت معتادا على التعامل مع الشل فببساطه يمكنك كتابة الأمر التالى لاظهار كافة تسجيلات cron التى يتم تنفيذها دوريا على السيرفر :
الأمر كالتالى :
رمز Code:
crontab -e
رمز Code:
29 1 * * * /scripts/upcp
0 1 * * * /scripts/cpbackup
35 * * * * /usr/bin/test -x /usr/local/cpanel/bin/tail-check && /usr/local/cpan$
*/15 * * * * /usr/local/cpanel/whostmgr/bin/dnsqueue > /dev/null 2>&1
*/5 * * * * /usr/local/cpanel/bin/dcpumon >/dev/null 2>&1
2,58 * * * * /usr/local/bandmin/bandmin
وسيتم دراسة كل شئ تفصيلا .
واذا نظرنا الى طريقة اضافة أمر تنفيذ cron عن طريق CPanel الخاصه بموقعك فيتم عن طريق الأيقونة التاليه :
اذا دخلنا الى cron بال CPanel سنجد أنها مقسمة الى طريقتين يمكنك من خلالهم اضافة أمر cron وهم :
ملحوظه : سأفترض أن العمل على CPanel 11
- The Standard GUI
- Advanced (Unix Style) Option
الطريقة الاولى : The Standard GUI
تظهر كما بالسى بنل :
وهنا يتم تحديد بالخيار الاول البريد الالكترونى الذى تريد ان يتم ارسال ناتج تنفيذ أمر cron اليه .
وبالخيار الثانى يتم كتابة الأمر الذى سيتم تنفيذه أو مسار الملف الذى سيتم تنفيذه .
ثم بعد ذلك الوقت الذى سيتم التنفيذ به الأمر ويتم تحديد به :
- Minute(s) الدقائق
- Hours(s)الساعات
- Days(s)الأيام
- Month(s)الشهور
- Weekday(s)أيام الاسبوع
الطريقة الثانية : Advanced (Unix Style) Option
اذا نظرنا هنا سنجد ان شكل كتابة الأوامر هو مشابة بدرجه كبيره الى سلسلة الأوامر التى جلبناها من تنفيذ الأمر crontab -e على الشل
نلاحظ هنا أن بالخيار الأول يتم تحديد البريدالالكترونى الذى سيتم ارسال ناتج تنفيذ أمر cron اليه
أما بعد ذلك هو الوقت والأمر وسيتم التحدث بذلك لاحقا .
اذا كنت على خبرة بأوامر لينكس وصيغة كتابتها فقم بكتابتة وقم بحفظ الناتج وستظهر لك صفحة تأكيديه .
بنية أمر cron
بنية أمر cron هو شئ سهل للغاية
فاذا نظرنا الى أحد الاوامر مثلا
رمز Code:
29 1 * * * /scripts/upcp
- الدقائق وتمثيلها يكون من 00 الى 59
- الساعات وتمثيلها يكون بصيغة 24 ساعه أى يكون من 00 الى 23
- الأيام وتمثيلها يكون من 1 الى 31
- الشهور وتمثيلها يكون من 1 الى 12
- يوم الاسبوع ويكون تمثيله بطريقتان :
- 3 حروف يمثلوا يوم الأسبوع المراد : sat , sun , mon , tue , wed , thu , fri وهم يمثلون ايام الاسبوع بالترتيب ابتداء من السبت انتهاء الى الجمعه
- ارقام يتم تمثيلهم برقم من صفر الى 6 حيث يمثل صفر يوم السبت وواحد يوم الأحد وهكذا الى يوم الجمعه
- الامر أو مسار الملف الذى يتم تنفيذه فى الوقت المحدد
اذن فالأمر السابق يعنى أن السكربت سيتم تنفيذه كل يوم و كل شهر الساعه الواحدة و29 دقيقه .
ولكن ماذا سنفعل اذا كنا نريد تنفيذ السكربت أو الأمر كل 5 دقائق
نستطيع كتابة ذلك بعدة طرق :الاولى: وهو كتابة كافة الدقائق المراد تنفيذ عندها مفصولة بفاصلة كما يلى :
رمز Code:
0 ,5,10,15,20,25,30,35,40,45,50,55 * * * * /path/to/command
رمز Code:
*/5 * * * * /path/to/command
cron تفصيلا فى php
أمر cron يكون على الصورة التالية :
رمز Code:
[ Minute - Hour - Day - Month - Weekday ] - Command
وCommand يتم تقسيمه الى
رمز Code:
[PATH OF PHP] [ARGUMENTS] [PATH OF PHP SCRIPT]
رمز Code:
[ Minute - Hour - Day - Month - Weekday ] [PATH OF PHP] [ARGUMENTS] [PATH OF PHP SCRIPT]
أولا : وقت تنفيذ الأمر [ Minute - Hour - Day - Month - Weekday ] :
تم تفصيله سابقا ولكن قد يكون عملية استخدام علامة النجمه * تمثل بعض الغموض ولهذا سنتعرض له كما يلى :
رمز Code:
* * * * * => تنفيذ كل دقيقه
0 * * * * => تنفيذ كل ساعه
0 0 * * * => تنفيذ كل يوم
0 0 0 * * => تنفيذ كل شهر
0 0 0 0 * => تنفيذ كل اسبوع
رمز Code:
PATH TO PHP : /usr/local/bin/php
الجزء الثالث [ARGUMENTS] :
عباره عن بعض الاوامر التى تؤثر فى تنفيذ السكربت ويمكن الاستغناء عن هذا الجزء وعدم كتابته
رمز Code:
-a Run interactively
-b <address:port>|<port> Bind Path for external FASTCGI Server mode
-C Do not chdir to the script's directory
-c <path>|<file> Look for php.ini file in this directory
-n No php.ini file will be used
-d foo[=bar] Define INI entry foo with value 'bar'
-e Generate extended information for debugger/profiler
-f <file> Parse <file>. Implies `-q'
-h This help
-i PHP information
-l Syntax check only (lint)
-m Show compiled in modules
-q Quiet-mode. Suppress HTTP Header output.
-s Display colour syntax highlighted source.
-v Version number
-w Display source with stripped comments and whitespace.
-z <file> Load Zend extension <file>.
وهو يمثل مسار الملف الذى سيتم تنفيذه وهنا يجب كتابة مسار الملف كاملا ابتداء من الروت
فمثلا اذا كان اسم المستخدم الخاص بموقعك هو mrajax
فيكون مسار الملف هو
/home/mrajax/public_html/
فاذا كانت اسم الملف file.php وموجود داخل مجلد public_html فسيكون مسار الملف هو
/home/mrajax/public_html/file.php
وعلى هذا يكون الامر مثلا الخاص بنا هو :
رمز Code:
0 * * * * /usr/local/bin/php -q /home/mrajax/public_html/cron/file.php
رمز Code:
29 1 * * sat /usr/local/bin/php $HOME/script.php
الأمر التالى
/usr/local/bin/php $HOME/script.php
رمز Code:
0 2 * * * /usr/local/bin/mysqldump -db_user -db_password db_name > /home/www/backups/dbname-`date +\%s`.sql