답변:
Drupal 7은 더 이상 cron_semaphore 변수를 사용하지 않고 잠금을 사용합니다. drupal_cron_run()
해당 기능의 일부 및 특히 다음 줄을 참조하십시오 .
// Try to acquire cron lock.
if (!lock_acquire('cron', 240.0)) {
// Omissis
}
// Release cron lock.
lock_release('cron');
Drupal 8은 잠금을 해제하는 서비스를 제공하기 때문에 이러한 라인을 Drupal 8로 이식하는 것은 매우 간단합니다.
동등한 코드는입니다 Cron::run()
.
// Try to acquire cron lock.
if (!$this->lock->acquire('cron', 900.0)) {
// Omissis
}
// Release cron lock.
$this->lock->release('cron');
Drush를 부트 스트랩하는 외부 스크립트에서 동일한 것을 달성하기 위해 Drush를 사용할 수없는 호스트에서 Drush를 잠금 해제해야하는 경우 다음과 유사한 코드가 필요합니다.
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 코드를 수정했습니다 . 스크립트를 실행하는 데 필요한 사용자 권한을 변경했으며,이 스크립트는 authorize.php 파일이있는 디렉토리에있는 cron_cleanup.php 파일에 있습니다.
Drush를 실행할 수 있으면 쉬워집니다. ( @dman의 답변 참조 )
D7 설치가 중단되면이 페이지로 이동하십시오. 나는 그것을 사용하여 그것을 발표했다
php-eval "drupal_cron_cleanup ()"
lock_release('cron')
cron 잠금을 해제하는 데 사용 합니다.
drush php:eval '\Drupal::lock()->release("cron");'