المواقع الإلكترونية

إعداد وإدارة مهام Cron

A cron job runs a command on a schedule, in the background, whether or not anyone is visiting your site. This guide covers adding one in KPanel, writing the schedule and the command correctly for…

تقوم مهمة cron بتشغيل أمر وفقاً لجدول زمني، في الخلفية، سواء كان أحد يزور موقعك أم لا. يغطي هذا الدليل إضافة مهمة في KPanel، وكتابة الجدول الزمني والأمر بشكل صحيح لهذه المنصة، واستبدال جدول WordPress غير الموثوق به، والعثور على المخرجات عندما لا تؤدي مهمة ما ما هو متوقع منها.

أين يوجد Cron في KPanel

ينتمي Cron إلى موقع، لذا يمكنك الوصول إليه من الموقع وليس من القائمة الرئيسية:

  1. سجل الدخول إلى KPanel وانقر على Websites في الشريط الجانبي الأيسر.
  2. انقر على الموقع الذي تريده.
  3. في قائمة الموقع الخاصة به، افتح Advanced، ثم Cron.

العنوان المباشر هو /websites/<site-id>/cron. ستشاهد جدول المهام الموجودة، أو حالة فارغة إذا لم يكن لدى الموقع أي منها.

مهام Cron على موقع في KPanel

إضافة مهمة

انقر على Add Cron Job في أعلى اليمين. يحتوي النموذج على ثلاثة حقول.

الجدول الزمني

ستة أزرار محددة مسبقاً تملأ التعبير لك:

الزرالتعبير
Every minute* * * * *
Every 5 min*/5 * * * *
Every hour0 * * * *
Daily 2AM0 2 * * *
Weekly Sunday0 2 * * 0
Monthly 1st0 2 1 * *

أو اكتب الخاص بك في Cron expression. الحقول الخمسة، بالترتيب، هي الدقيقة والساعة واليوم من الشهر والشهر ويوم الأسبوع:

minute  hour  day-of-month  month  day-of-week
  • 0 3 * * * يعمل في الساعة 3:00 صباحاً يومياً.
  • */15 * * * * يعمل كل خمس عشرة دقيقة.
  • 0 9 * * 1 يعمل في الساعة 9:00 صباحاً كل يوم اثنين.
  • 30 1 1 * * يعمل في الساعة 1:30 صباحاً في اليوم الأول من كل شهر.
  • 0 */6 * * * يعمل كل ست ساعات، على الساعة.

التسمية

اسم ستتعرف عليه لاحقاً، مثل WordPress cron أو Nightly stock sync. هذا ما يعرضه جدول المهام، لذا اجعله وصفياً: job 3 لا يساعد أحداً في الساعة 2 صباحاً.

الأمر

أمر shell الذي سيتم تشغيله. انقر على Save لإنشاء المهمة.

استخدم المسارات الكاملة. يعمل Cron ببيئة أساسية ولا توجد أي ملفات تعريف shell لديك، لذا فإن php العادي أو المجلد النسبي الذي يعمل عند تسجيل الدخول عبر SSH سيفشل بصمت هنا. اكتب المسار الكامل، في كل مرة.

كتابة الأمر

تعمل المهام كمستخدم نظام خاص بموقعك، لذا يمثل مجلد منزلك نقطة الارتكاز الصحيحة و ~ يحل بشكل صحيح. ملفات موقعك توجد في:

~/htdocs/yourdomain.co.nz

يمكنك تأكيد المسار الدقيق على علامة تبويب Files للموقع، ثم SFTP، التي تطبعها تحت Site files.

الأوامر النموذجية:

cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now
cd ~/htdocs/yourdomain.co.nz && /usr/bin/php bin/send-queued-emails.php
/usr/bin/curl -fsS https://yourdomain.co.nz/api/nightly-report

اختبر الأمر قبل جدولته. الصقه في قسم WordPress، ثم Console للموقع إذا كان أمر wp، أو شغّله عبر SSH. المهمة التي لم تكن ستنجح أبداً أسهل كثيراً في اكتشافها في السطر الفوري من الساعة 3 صباحاً في ملف السجل.

استبدال جدول WordPress المدمج

يأتي WordPress مع جدول زمني وهمي خاص به، WP-Cron، الذي ينطلق فقط عند تحميل شخص ما لصفحة. على موقع هادئ، تُنشر المشاركات المجدولة بتأخير والرسائل البريدية تبقى في قائمة الانتظار. على موقع مزدحم، يدفع كل زائر تكلفة فحص الجدول الزمني.

مهمة cron حقيقية تصلح كليهما. KPanel يقوم بكل التبديل لك:

  1. افتح الموقع، ثم علامة التبويب WordPress.
  2. افتح قسم WP-Cron.
  3. انقر على Enable system cron.

هذا يضيف جدولاً يشغّل WP-Cron كل خمس دقائق ويعيّن DISABLE_WP_CRON بحيث تتوقف تحميلات الصفحة عن تشغيله أيضاً. Remove system cron على نفس الشاشة يعكس كلا النصفين.

إذا كنت تفضل القيام به يدوياً، فهي خطوتان:

تعطيل النسخة المشغلة من الزائر. أضف هذا إلى wp-config.php، فوق سطر /* That's all, stop editing! */، باستخدام Files، ثم File Manager:

define( 'DISABLE_WP_CRON', true );

أضف المهمة الحقيقية. في Advanced، ثم Cron:

  • Schedule: */5 * * * *
  • Label: WordPress cron
  • Command: cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now

لا تتخطَ جزء DISABLE_WP_CRON. مع تشغيل كليهما، يمكن لكل مهمة مجدولة أن تنطلق مرتين: رسائل بريد مكررة، معالجة طلبات مكررة، رسوم مكررة على مكون إضافي للاشتراك. استخدم إجراء النقرة الواحدة في قسم WP-Cron ولا يمكن أن يحدث هذا لك.

WooCommerce وقوائم الانتظار في الخلفية

يستخدم WooCommerce قائمة انتظار في الخلفية لتغييرات حالة الطلب وتجديدات الاشتراك والرسائل البريدية وتحديثات المخزون. يعتمد على WP-Cron، لذا فهو بالضبط عبء العمل الذي يعاني على متجر هادئ.

بمجرد وضع الجدول الحقيقي، تتم معالجة قائمة الانتظار كل خمس دقائق. راقبها في WooCommerce، ثم Status، ثم Scheduled Actions في wp-admin.

يمكن لمتجر بحجم عالي الانتقال إلى */2 * * * *. الانخفاض عن ذلك نادراً ما يساعد: تقضي وقتاً أكثر في بدء العمليات من القيام بالعمل. انظر Setting Up WooCommerce.

إدارة المهام الموجودة

يعرض جدول المهام Label، Schedule، Command، Last run و Status، مع إجراءين على كل صف:

  • Disable توقف مهمة مؤقتاً دون حذفها، وتتحول إلى Enable لإعادتها. استخدم هذا عندما تختبر ما إذا كانت مهمة تسبب مشكلة.
  • Delete يزيلها بشكل دائم. يُطلب منك التأكيد، والجريات المجدولة تتوقف على الفور.

لا يمكن التراجع عن حذف مهمة cron. تتم إزالة الجدول الزمني من الخادم في هذه اللحظة. إذا كنت تحاول فقط إيقافها مؤقتاً، استخدم Disable.

العثور على المخرجات

كل مهمة ينشئها Kapsule يتم التقاط مخرجاتها لك. يتم إلحاق الإخراج القياسي والأخطاء بملف سجل في مجلد cron-logs في مجلد منزل مستخدم الموقع، ملف واحد لكل مهمة.

هذا السجل هو الإجابة على سؤال "هل تمت تشغيل مهمتي؟" تقريباً، لأنه يسجل ما طبعه الأمر وأي خطأ رفعه.

لقراءته، اتصل عبر SSH وابحث في ~/cron-logs/. يستخدم SSH مصادقة المفتاح، لذا أضف مفتاحك العام أولاً من علامة تبويب Files للموقع، ثم SSH Keys: انظر Adding SSH Keys.

محدود File Manager و حسابات SFTP مجلد الموقع الخاص بك، ~/htdocs/yourdomain.co.nz، و cron-logs يجلس مستوى واحد فوقه. هذا مقصود: فهو يحافظ على مقاول لديه وصول SFTP خارج كل شيء باستثناء الموقع الإلكتروني. استخدم SSH الأصلي للوصول إلى السجلات، أو إعادة توجيه الإخراج إلى مجلد الموقع كما هو موضح أدناه.

إذا كنت تفضل أن تكون المخرجات في مكان يمكن للمدير الملفات فتحه، أعد توجيهها بنفسك:

cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now >> ~/htdocs/yourdomain.co.nz/wp-content/cron.log 2>&1

2>&1 يرسل الأخطاء إلى نفس الملف كالإخراج العادي. بدونها، الأخطاء لا تذهب إلى أي مكان.

أي شيء داخل مجلد الموقع الخاص بك يمكن أن يُطلب عليه عبر الويب. ضع سجل معاد التوجيه تحت wp-content بدلاً من جذر الموقع، أعطه اسماً لا أحد سيخمنه، احذفه بمجرد انتهائك من تصحيح الأخطاء.

الممارسات الجيدة

  • تجنب جداولك الزمنية. ستة مهام جميعها معيّنة على 0 2 * * * تبدأ جميعها في نفس الوقت. نشرها: 0 2، 10 2، 20 2.
  • لا تستخدم كل دقيقة إلا إذا كنت تحتاجها حقاً. */5 كافية لكل شيء تقريباً، بما في ذلك WordPress و WooCommerce.
  • احتفظ بالمهام قصيرة. مهمة تستغرق وقتاً أطول من فترتها ستتداخل مع الجولة التالية.
  • أعد توجيه الإخراج لأي شيء مزعج، بحيث لا تملأ مهمة ثرثارة واحدة قرصك.
  • راجع القائمة من حين لآخر. المهام المتبقية من مكون إضافي أزلته تبقى تعمل.

استكشاف الأخطاء وإصلاحها

المهمة لا تبدو أنها تعمل أبداً. تحقق من المسار أولاً. افتح ملف السجل. ثم أكد أن الحالة Active وليست Disabled. ثم شغّل نفس الأمر عبر SSH وانظر ما يقول.

"command not found" في السجل. مسار كامل مفقود. استخدم /usr/bin/php، /usr/bin/wp، /usr/bin/curl بدلاً من الاسم العادي.

Permission denied. المهمة تعمل كمستخدم نظام الموقع الخاص بك. يجب أن يمتلك هذا المستخدم، أو على الأقل يكون قادراً على قراءة كل شيء يلمسه الأمر. تحقق من الأذونات في Using the File Manager.

مهام WordPress لا تزال تعمل بتأخير. أكد أن كلا نصفي التبديل موجود: الجدول الزمني موجود في Advanced، ثم Cron، و DISABLE_WP_CRON معيّن. يعرض قسم WP-Cron على علامة التبويب WordPress الحالة الحالية لكليهما.

الموقع بطيء بينما تعمل المهمة. انقلها إلى ساعة أهدأ، أو قسّم العمل إلى دفعات أصغر. استخدام الموارد على مستوى الموقع مرئي تحت Performance: انظر Improving Website Speed.

توقفت مهمة عن العمل بعد تحديث مكون إضافي. قد يكون مسار الأمر قد تغير. تحقق من السجل، ثم حدّث الأمر من جدول المهام بحذف المهمة القديمة وإضافة مهمة معدّلة.

هل تحتاج إلى مساعدة إضافية؟

راسلنا على البريد الإلكتروني support@kapsulehost.com أو افتح محادثة في KPanel.

فتح KPanel
إعداد وإدارة مهام Cron