크론 실행이 중지되었습니다. 로그는 "크론이 이미 실행 중일 때 다시 실행하려고합니다."라고 말합니다.


11

제목별로이 문제를 해결하고 해결하는 단계는 무엇입니까?

수동으로 실행하려고하면 즉시 페이지가 표시되고 "Cron이 이미 실행 중일 때 cron을 다시 실행하려고합니다"라는 오류 메시지가 표시됩니다.


내가 뭘에 DB를 크론 모습에 내 머리 위로 떨어져 기억하지 수 있지만, "이미 실행되는 동안 다시 실행 크론를 시도"의 빠른 구글에 저를 지적 digitaledgesw.com/node/21 , 그것은 수도 D7에 적용
Jimajamma

매우 이상합니다. 해당 메시지는 drupal_cron_run의 lock_acquire를 통해 해당 변수를 확인한 직후 코어 코드에서 정확히 한 번 발견됩니다. 실제로 다른 정보를 추가 한 정보 / 증상을 게시하면 다시 열 것입니다.
mpdonadio

제안 : 새로운 Drupal을 설치하고 3 분마다 cron을 실행하고 동일한 효과가 있는지 확인하십시오!
Aboodred1

그냥 실행drush sqlq "DELETE FROM semaphore WHERE name = 'cron';"
kenorb

4
미래의 독자들에게 : 현재 허용되는 답변은 Drupal 7에 대해 정확하지 않습니다. Drupal 버전은 질문입니다. Drupal 6에는 유효하지만 Drupal 7 코드는 변경되었습니다. Drupal 7은 Drupal 6에서 정리되지 않은 상태로 남아 있습니다.
kiamlaluno

답변:


12

크론 세마포어가 잠겨있을 것입니다. 당신은 호출을 시도 할 수 () drupal_cron_cleanup (크론에 의해 호출 될 발생하지 않습니다) 코드에서 어디에서 그리고 당신의 크론 세마포어 변수의 잠금을 해제해야합니다.

Drupal 6에서 drush를 구성한 경우 다음을 시도 할 수도 있습니다.

$ drush vdel -y cron_semaphore

3
또는 drush가 아닌 db 액세스 권한이있는 경우 변수 테이블에서 수동으로 삭제하십시오.
Malks

8
이 값이 테이블에 캐시된다는 것을 잊지 마십시오 cache_bootstrap.
tostinni

1
변수 테이블에서 cron_semaphore를 찾지 못했기 때문에 정확한 이름은 무엇입니까?
mohammed amine bourkadi

2
위의 drush 명령을 실행하면 "cron_semaphore not found"가 표시됩니다. 어떤 아이디어?
Nigel Waters

1
@NigelWaters 크론 세마포어는 Drupal 7에서 잠금 장치가되었지만 drupal_cron_cleanup()업데이트되지 않은 것 같습니다.
kiamlaluno

19

요약

다음 두 가지 조건이 충족되면 표시되는 오류 메시지가 나타납니다.

  • 크론 작업이 완료되지 않거나 (오류) 완료하는 데 4 분 이상 걸립니다.
  • 4 분마다 cron을 더 자주 호출합니다 (Drupal의 설정이 아닌 crontab 설정에 따라).

따라서이 오류 메시지는 실패하거나 실행하는 데 시간이 오래 걸리는 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_debug를 실행하면 모든 cron 작업이 성공적으로 종료되고 빠르게 실행됩니다 (~ 5 초가 소요되는 핵심 업데이트 제외). 이 문제의 원인이 느리거나 실패한 cron 루틴 인 경우 cron_debug가 강조 표시하지 않는 이유는 무엇입니까?
doub1ejack

1
cron_debug 모듈의 작동 방식을 모르므로 실제로 이것에 대해서는 언급 할 수 없습니다. 'cron_safe_threshold'변수의 값은 무엇입니까? '세마포어'테이블은 어떤 데이터입니까?
Alice Heaton

1
자세한 설명은 Drupal 7의 정답입니다.
kiamlaluno

BTW, cron이 실패하면 Cron 디버그 모듈을 사용하여 어떤 모듈이 중단되는지 확인하십시오-10 중 9 번이 검색 모듈입니다. 검색 모듈을 끄고 cron을 수동으로 실행하고 결과를 확인하십시오. 색인을 생성하려는 노드를 찾으려면 다음과 같이하십시오
Dan Mantyla

4

cron_semaphore변수는 Drupal 6에 존재하지만 Drupal 7을 사용하고 있으므로 세마포어 잠금이이라는 별도의 테이블로 이동했습니다 semaphore.

따라서 cron 세마포어를 잠금 해제하는 솔루션은 다음과 같습니다.

드루팔 7

drush sqlq "TRUNCATE semaphore"

드루팔 6

drush -y vdel cron_semaphore 

3
Drupal 7의 "극단적"변형drush sql-query "DELETE FROM semaphore WHERE name='cron'"
tanius

2

Cron Debug 모듈 을 사용하여 cron을 디버깅 할 수 있습니다 .

크론 디버그는 크론 프로세스를 찾는 데 도움이됩니다.

  • 프로그래밍 또는 런타임 오류로 인해 실패
  • 시간 초과 (PHP, 서버, 데이터베이스)
  • 매우 느리다

Cron Debug를 사용하면 다른 특정 크론 기능을 테스트하면서 다른 특정 크론 기능을 테스트 할 수 있습니다. 이것은 자체 기능을 테스트 할 때마다 모든 유지 관리, 경고 및 기타 작업으로 전체 cron.php를 실행하지 않으려는 cron 기능을 개발하는 데 유용 할 수 있습니다.


1
이 모듈은 저의 생명을 구했습니다!
Dan Mantyla

예,이 모듈은 좋습니다. cron 작업을 디버깅하는 데 도움이됩니다.
Nishant

1

이것이 cron 문제를 해결 한 방법입니다.

  1. PhpMyAdmin을 통해 세마포어 테이블을보고 행을 삭제했습니다. name = cron
  2. 커맨드 라인을 통해 "drush cron"을 실행했습니다
  3. 문제의 실마리를 알려주는 오류 메시지를 보았습니다. 이것은 당신에게 다를 수 있지만, 나에게 최근에 설치된 모듈과 PHP 라이브러리를 공유하는 제거 된 모듈은 오류를 일으켰습니다.


0

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을 다시 실행하십시오. 그것이 실행될 수 있습니다.

배포하지 말고 완료된 후 되 돌리십시오. 디버깅에도 도움이됩니다.


-1

나는 이것을 몇 번이나 생각해 냈습니다. 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 다음 자동 크론 실행이 정상적으로 완료되는지 확인하십시오.


Drupal Answers에 오신 것을 환영합니다! 문제는 Drupal 7에 관한 것입니다. 해당 데이터베이스 테이블에서 행을 삭제해도 큰 영향을 미치지 않습니다.
kiamlaluno

아, 그것은 OP의 Drupal 7 용이라고 구체적으로 말하지 않았기 때문에 대답을 추가했습니다. 그것은 drupal 6에 잘 작동하며 일반적인 '세마포 삭제'답변보다 더 완벽합니다. 누군가가 d6에서 온다면 도움이 될 것이라고 생각했습니다. 그게 틀렸어? 나는 그것을 위해 표시되어있는 것 같습니다.
munkiepus

명령 행 부분에서 run cron을 제거하기 위해 방금 업데이트되었습니다. 문제를 일으킬 수 있음을 발견했습니다
munkiepus

-1

xdebug를 사용하여 디버그하고 관리 인터페이스 관리> 구성> 시스템> cron에서 cron을 실행하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.