ক্রোন লক ছেড়ে দিন


15

আমি ক্রোন দৌড়ে গিয়ে মৃত্যুদণ্ড বাতিল করে দিয়েছি। এখন আমি এই বার্তাটি পেয়েছি:

এটি ইতিমধ্যে চলমান অবস্থায় ক্রোন পুনরায় চালানোর চেষ্টা করা হচ্ছে।

ড্রুপাল 7-এ, আমি ক্রোন_সেসফল ভেরিয়েবল মুছতে পারি ।

দ্রুপাল 8 তে একই অর্জনের উপায় কী?

উত্তর:


25

এটি এখন semaphoreটেবিলে মূল নাম "ক্রোন" রয়েছে। drush sqlq "DELETE FROM semaphore WHERE name = 'cron';"কমান্ডের মাধ্যমে এটি সরানো যেতে পারে ।

অথবা, যদি আপনি দ্রুপাল বুটস্ট্র্যাপযুক্ত পরিবেশে পিএইচপি চালাতে পারেন তবে আপনি লাইনটি চালাতে পারেন:

\Drupal::lock()->release('cron');

1
drush php:eval '\Drupal::lock()->release("cron");'
গোগোভিটশ


5

ড্রুপাল 8 রান জন্য:

drush sqlq "DELETE FROM semaphore WHERE name = 'cron';"

1

ড্রুপাল 7 আর ক্রোন_সেসেফোর ব্যবহার করে না ভেরিয়েবল , তবে একটি লক। দেখুন drupal_cron_run()এবং বিশেষত নিম্নলিখিত লাইনগুলি, সেই ফাংশনের অংশ।

// Try to acquire cron lock.
if (!lock_acquire('cron', 240.0)) {
  // Omissis
}
// Release cron lock.
lock_release('cron');

এই লাইনগুলি দ্রুপাল 8-এ পোর্ট করা একেবারে সোজা, যেহেতু দ্রুপাল 8-এ একটি লক পাওয়ার এবং ছেড়ে দেওয়ার জন্য একটি পরিষেবা রয়েছে।

সমমানের কোডটি Cron::run()

// Try to acquire cron lock.
if (!$this->lock->acquire('cron', 900.0)) {
  // Omissis
}
// Release cron lock.
$this->lock->release('cron');

আপনার যদি এটি কোনও হোস্টে আনলক করা দরকার যেখানে আপনি ড্রশ ব্যবহার করতে পারবেন না, যেমনটি আমার ক্ষেত্রে ঘটে থাকে, তবে কোনও বাহ্যিক স্ক্রিপ্ট থেকে ড্রুপালকে বুটস্ট্র্যাপের জন্য নিম্নলিখিত কোডের অনুরূপ কোডের দরকার পড়তে হবে achieve

use Drupal\Core\DrupalKernel;
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Drupal\Core\Site\Settings;

chdir('..');

$autoloader = require_once 'autoload.php';

function cron_unlock_access_allowed(Request $request) {
  $account = \Drupal::service('authentication')->authenticate($request);
  if ($account) {
    \Drupal::currentUser()->setAccount($account);
  }
  return \Drupal::currentUser()->hasPermission('administer site configuration');
}

try {
  $request = Request::createFromGlobals();
  $kernel = DrupalKernel::createFromRequest($request, $autoloader, 'prod');
  $kernel->prepareLegacyRequest($request);
}
catch (HttpExceptionInterface $e) {
  $response = new Response('', $e->getStatusCode());
  $response->prepare($request)->send();
  exit;
}

\Drupal::moduleHandler()->addModule('system', 'core/modules/system');
\Drupal::moduleHandler()->addModule('user', 'core/modules/user');
\Drupal::moduleHandler()->load('system');
\Drupal::moduleHandler()->load('user');

if (cron_unlock_access_allowed($request)) {
  \Drupal::lock()->release('cron');
  $status_code = 200;
}
else {
  $status_code = 403;
}
$response = new Response('', $status_code);
$response->prepare($request)->send();

আমি কোড অভিযোজিত authorize.php । আমি স্ক্রিপ্টটি চালানোর জন্য প্রয়োজনীয় ব্যবহারকারীর অনুমতি পরিবর্তন করেছি, যা আমি ক্রোন_লেয়ানআপ.এফপি ফাইলটিতে અધિકૃત.পিএফপি ফাইলযুক্ত ডিরেক্টরিতে রেখেছি।

আপনি যদি ড্রাশ চালাতে পারেন তবে এটি আরও সহজ হয়ে যায়। ( @ Dman এর উত্তর দেখুন ।)


0

আমার ডি 7 ইনস্টলেশনটি আটকে গেলে এই পৃষ্ঠায় পৌঁছেছেন। আমি এটি ব্যবহার করে মুক্তি

পিএইচপি-ইভাল "দ্রুপাল_ক্রোন_ক্লানআপ ()"


প্রশ্নটি ড্রুপাল 8 এর জন্য, দ্রুপাল 7. এর নয়। তদ্ব্যতীত, দ্রুপাল in-এ ফাংশনটি অবচিত বলে চিহ্নিত করা হয়েছে।
কিমলালুনো

আসলে, ড্রুপাল 7 নিজে lock_release('cron')ক্রোন লক প্রকাশ করতে ব্যবহার করে।
কিমলালুনো

0

উপরে থেকে প্রস্তাবিত পদক্ষেপের সাহায্যে আপনি ড্রুপাল 8 এ কাজ করতে না পারলে - সম্ভবত আপনি রেডিসের মতো কিছু ব্যবহার করছেন এবং ক্রোন লকটি সেখানে সংরক্ষণ করা আছে। এক্ষেত্রে আপনি এর সাথে উন্নতি করতে পারেন:

drush php-eval '\Drupal::service("lock")->release("all")'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.