it-swarm.asia

توقف كرون عن الجري. تقول السجلات: "محاولة إعادة تشغيل cron أثناء تشغيله بالفعل."

ما هي خطوات استكشاف هذه المشكلة وحلها حسب العنوان؟

عندما أحاول التشغيل يدويًا ، أحصل على صفحة على الفور ، ورسالة الخطأ "محاولة إعادة تشغيل cron أثناء تشغيله بالفعل."

11
giorgio79

ربما تكون إشارة كرون مؤمنة. يمكنك محاولة الاتصال drupal_cron_cleanup () من أي مكان في الكود الخاص بك (لا يحدث أن يتم استدعاؤه بواسطة cron) وهذا يجب أن يفتح متغير إشارة cron الخاص بك.

إذا كنت قد قمت بتكوين drush في Drupal 6 ، يمكنك أيضًا تجربة:

$ drush vdel -y cron_semaphore
12
amateur barista

ملخص

قد تظهر رسالة الخطأ التي تراها في حالة استيفاء الشرطين التاليين:

  • لا تنتهي وظائف cron الخاصة بك (خطأ) أو تستغرق أكثر من 4 دقائق لإنهاء ؛
  • تقوم باستدعاء cron أكثر من كل 4 دقائق (وفقًا لإعداد crontab الخاص بك ، وليس الإعداد في Drupal)

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

خلفية

أول شيء يجب فهمه هو كيفية تشغيل مهام cron Drupal. يتم استدعاء Drupal cron على فترات منتظمة - إما من خلال مهمة cron على الخادم الخاص بك ، أو بعد كل تحميل للصفحة إذا كنت تستخدم الفقراء كرون الرجل الذي هو الافتراضي دروبال.

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

في Drupal 7 ، يستخدم cron دروبال آليات القفل ، والتي توفر نظام قفل تعاوني استشاري. واحدة من ميزات نظام القفل هذا هي أن الأقفال تنتهي بعد وقت معين. في حالة cron ، تنتهي صلاحيتها بعد 4 دقائق - لذلك إذا تم استدعاء cron الخاص بك كل 3 دقائق ولم تكن مهمة cron السابقة قد انتهت في ذلك الوقت (إما أنها تعطلت أو كانت بطيئة جدًا) ، فستحصل بالفعل على رسالة الخطأ هذه .

حقيقة أن تعيين cron ليكون كل 12 ساعة لا يحدث فرقًا - لأن مهمة cron Drupal تفشل/تستغرق وقتًا طويلاً ، يفترض Drupal أنه لم يتم تشغيلها لذا تحاول تشغيلها مرة أخرى بمجرد استدعاء cron. ينطبق التأخير لمدة اثني عشر ساعة فقط على عمليات تشغيل cron الناجحة.

لم يعد متغير إشارة cron موجودًا في Drupal 7 - كان هذا لإصدار قديم من Drupal. في Drupal 7 لا توجد طريقة موثوقة لتحرير القفل يدويًا ، لأن خلفية القفل قد تتغير - ومع ذلك إذا كنت تستخدم آلية القفل الأساسية ، فيمكنك تحرير أقفال cron عن طريق تحرير قاعدة البيانات:

DELETE FROM semaphore WHERE name = 'cron';

ولكن من خلال القيام بذلك ، لن تكون سوى إصلاح الأعراض - المشكلة التي تحتاج إلى معالجة هي لماذا فشل cron/يستغرق وقتًا طويلاً للتشغيل.

19
Alice Heaton

ال cron_semaphore كان المتغير موجودًا في Drupal 6 ، ولكنك تستخدم Drupal 7 ، لذلك انتقلت أقفال الإشارة إلى جدول منفصل يسمى semaphore .

لذا فإن الحل لفتح إشارة كرون سيكون:

دروبال 7

drush sqlq "TRUNCATE semaphore"

دروبال 6

drush -y vdel cron_semaphore 
4
kenorb

يمكنك تصحيح cron باستخدام Cron Debug الوحدة النمطية.

سيساعدك Cron Debug في العثور على عمليات cron التي

  • فشل بسبب أخطاء البرمجة أو وقت التشغيل
  • مهلة (PHP ، خادم ، قاعدة بيانات)
  • بطيئة للغاية

سيتيح لك Cron Debug أيضًا اختبار تشغيل وظائف cron معينة أثناء عدم تشغيل وظائف أخرى. يمكن أن يكون هذا لطيفًا لتطوير وظائف cron حيث لا تريد تشغيل ملف cron.php كامل مع جميع أعمال الصيانة والتنبيهات والمهام الأخرى في كل مرة تختبر فيها وظيفتك.

2
Nishant

هذه هي الطريقة التي قمت بها بحل مشكلة cron:

  1. عبر PhpMyAdmin ، نظرت في جدول الإشارة وحذف الصف حيث name = cron
  2. ركضت "drush cron" عبر سطر الأوامر
  3. رأيت رسالة خطأ أعطتني فكرة عن المشكلة ؛ قد يكون هذا مختلفًا بالنسبة لك ، ولكن بالنسبة لي كانت الوحدة النمطية التي تم إلغاء تثبيتها مؤخرًا والتي تشارك PHP مع وحدة مثبتة تسبب في حدوث خطأ
1
albertski

من أجل Drupal 8: drush sqlq "DELETE FROM سيمافور WHERE name = 'cron'؛"

0
Diana

في Drupal 7 ، كخيار آخر ،

عبر drush cron كنت أحصل ،

WD cron: Attempting to re-run cron while it is already running.       [warning]
Cron run failed.                                                      [error]

كان هذا على بيئة التطوير وحدث لأن كرون سابق كان يعمل وانقطع.

على includes/common.inc ، في السطر 5413 ، أو حولها ، ستجد هذه الكتلة https://cgit.drupalcode.org/drupal/tree/includes/common.inc؟h=7.x#n541 =

  // Try to acquire cron lock.
  if (!lock_acquire('cron', 240.0)) {
    // Cron is still running normally.
    watchdog('cron', 'Attempting to re-run cron while it is already running.', array(), WATCHDOG_WARNING);
  }

تعديل if ب && FALSE ،

  // Try to acquire cron lock.
  if (!lock_acquire('cron', 240.0) && FALSE) {
    // Cron is still running normally.
    watchdog('cron', 'Attempting to re-run cron while it is already running.', array(), WATCHDOG_WARNING);
  }

وإعادة تشغيل كرون. هذا سيسمح لها بالعمل.

من فضلك لا تنشر هذا وتعيده بعد الانتهاء. كما أنه يساعد في تصحيح الأخطاء.

0
rovr138

لقد واجهت هذا عدة مرات. في Drupal 6 إذا كنت لا تستخدم drush يمكنك إصلاحه على النحو التالي:

1 قم بإزالة متغيرات cron_٪ من جدول المتغيرات.

SELECT * FROM variable WHERE name like "cron%";

DELETE FROM variable WHERE name like "cron%";

2 واضح Drupal في:/admin/settings/performance

بالضغط على زر "مسح البيانات المخزنة مؤقتًا" في أسفل الصفحة.

3 تشغيل cron من لوحة المشرف/المشرف/التقارير/الحالة/run-cron لا تقم بتشغيله من comand line لأن هذا يمكن أن يسبب مشاكل.

4 تحقق من اكتمال تشغيل cron التلقائي التالي كالمعتاد.

0
munkiepus