제목별로이 문제를 해결하고 해결하는 단계는 무엇입니까?
수동으로 실행하려고하면 즉시 페이지가 표시되고 "Cron이 이미 실행 중일 때 cron을 다시 실행하려고합니다"라는 오류 메시지가 표시됩니다.
drush sqlq "DELETE FROM semaphore WHERE name = 'cron';"
제목별로이 문제를 해결하고 해결하는 단계는 무엇입니까?
수동으로 실행하려고하면 즉시 페이지가 표시되고 "Cron이 이미 실행 중일 때 cron을 다시 실행하려고합니다"라는 오류 메시지가 표시됩니다.
drush sqlq "DELETE FROM semaphore WHERE name = 'cron';"
답변:
크론 세마포어가 잠겨있을 것입니다. 당신은 호출을 시도 할 수 () drupal_cron_cleanup (크론에 의해 호출 될 발생하지 않습니다) 코드에서 어디에서 그리고 당신의 크론 세마포어 변수의 잠금을 해제해야합니다.
Drupal 6에서 drush를 구성한 경우 다음을 시도 할 수도 있습니다.
$ drush vdel -y cron_semaphore
cache_bootstrap
.
drupal_cron_cleanup()
업데이트되지 않은 것 같습니다.
다음 두 가지 조건이 충족되면 표시되는 오류 메시지가 나타납니다.
따라서이 오류 메시지는 실패하거나 실행하는 데 시간이 오래 걸리는 cron 태스크의 증상입니다. (참고 : 귀하가 이미 범인을 찾은 것으로 알고 있지만 검색을 통해이 페이지를 찾는 사람들에게 답변을 추가하고 싶습니다.)
가장 먼저 이해해야 할 것은 Drupal cron 태스크가 실행되는 방법입니다. Drupal cron은 서버의 cron 작업을 통해 또는 Drupal의 기본값 인 가난한 사람의 cron을 사용하는 경우 모든 페이지로드 후에 정기적 으로 호출됩니다 .
cron이 호출 될 때마다 cron 태스크가 반드시 실행될 필요는 없습니다. Drupal에는 cron 태스크가 얼마나 자주 실행되어야하는지에 대한 설정이 있습니다 (기본값은 3 시간). 그러나이 3 시간 지연은 cron 태스크가 성공적으로 완료된 경우에만 적용됩니다.
Drupal 7에서 cron은 Drupal의 잠금 메커니즘을 사용 하여 협력 자문 잠금 시스템을 제공합니다. 이 잠금 시스템의 기능 중 하나는 특정 시간이 지나면 잠금이 만료된다는 것입니다. cron의 경우 4 분 후에 만료되므로 3 분마다 cron이 호출되고 이전 cron 작업이 해당 시간까지 완료되지 않은 경우 (충돌되었거나 매우 느림) 실제로이 오류 메시지가 표시됩니다. .
Drupal cron 작업이 너무 오래 걸리거나 실패하기 때문에 Drupal은 cron이 실행 되 자마자 다시 실행하려고 시도합니다. 12 시간 지연은 성공적인 크론 실행에만 적용됩니다.
크론 세마포어 변수는 Drupal 7에 더 이상 존재하지 않습니다. 이것은 이전 버전의 Drupal 용이었습니다. Drupal 7에서는 잠금 백엔드가 변경 될 수 있으므로 잠금을 수동으로 해제하는 신뢰할 수있는 방법은 없습니다. 그러나 코어 잠금 메커니즘을 사용하는 경우 데이터베이스를 편집하여 크론 잠금을 해제 할 수 있습니다.
DELETE FROM semaphore WHERE name = 'cron';
그러나이 작업을 수행하면 증상을 해결할 수 있습니다. 해결해야 할 문제는 cron이 실패하거나 너무 오래 실행되는 이유입니다.
이 cron_semaphore
변수는 Drupal 6에 존재하지만 Drupal 7을 사용하고 있으므로 세마포어 잠금이이라는 별도의 테이블로 이동했습니다 semaphore
.
따라서 cron 세마포어를 잠금 해제하는 솔루션은 다음과 같습니다.
드루팔 7
drush sqlq "TRUNCATE semaphore"
드루팔 6
drush -y vdel cron_semaphore
drush sql-query "DELETE FROM semaphore WHERE name='cron'"
Cron Debug 모듈 을 사용하여 cron을 디버깅 할 수 있습니다 .
크론 디버그는 크론 프로세스를 찾는 데 도움이됩니다.
- 프로그래밍 또는 런타임 오류로 인해 실패
- 시간 초과 (PHP, 서버, 데이터베이스)
- 매우 느리다
Cron Debug를 사용하면 다른 특정 크론 기능을 테스트하면서 다른 특정 크론 기능을 테스트 할 수 있습니다. 이것은 자체 기능을 테스트 할 때마다 모든 유지 관리, 경고 및 기타 작업으로 전체 cron.php를 실행하지 않으려는 cron 기능을 개발하는 데 유용 할 수 있습니다.
Drupal 7에서는 다른 옵션으로도
통해 drush cron
나는 얻고 있었다
WD cron: Attempting to re-run cron while it is already running. [warning]
Cron run failed. [error]
이것은 개발 환경에 있었고 이전 cron이 실행 중이고 중단 되었기 때문에 발생했습니다.
에가 includes/common.inc
주위 라인 5413, 또는에서,이 블록을 찾을 수 있습니다, https://cgit.drupalcode.org/drupal/tree/includes/common.inc?h=7.x#n5413
// 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);
}
그리고 cron을 다시 실행하십시오. 그것이 실행될 수 있습니다.
배포하지 말고 완료된 후 되 돌리십시오. 디버깅에도 도움이됩니다.
나는 이것을 몇 번이나 생각해 냈습니다. Drupal 6에서 drush를 사용하지 않으면 다음과 같이 해결할 수 있습니다.
1 변수 테이블에서 cron_ % 변수를 제거하십시오.
SELECT * FROM variable WHERE name like "cron%";
DELETE FROM variable WHERE name like "cron%";
/ admin / settings / performance에서 2 개의 Drupal 캐시를 지 웁니다.
페이지 하단의 '캐시 된 데이터 지우기'버튼을 누릅니다.
3 관리 패널에서 cron을 실행합니다. / admin / reports / status / run-cron 명령 줄에서 실행하지 마십시오. 문제가 발생할 수 있습니다.
4 다음 자동 크론 실행이 정상적으로 완료되는지 확인하십시오.