마 젠토 1.9.1 cron_schedule은 영원히 선택되지 않았습니다


12

나는 거의 3 일을 보냈고 Magento Cron이 예약 된 작업을 처리하고 이해할 수 없었습니다. Magento 1.9.1.0을 실행 중이며 최근 주문 이메일이 즉시 전송되는 대신 대기열에 있음을 알았습니다. 나는 필요성을 이해하지만 시스템이 대기열을 선택하도록 만들 수 없습니다.

여기 Cronjob을 볼 수 있습니다. 여기에 이미지 설명을 입력하십시오

여기 내 cronjob 명령 줄이 있습니다. 여기에 이미지 설명을 입력하십시오

다음은 cron_schedule 테이블에서 태스크를 작성하는 방법입니다. 여기에 이미지 설명을 입력하십시오

레코드가 cron_schedule 테이블에 만들어지기 때문에 Cron이 5 분마다 한 번씩 실행되고 있다고 생각합니다. PhpMyAdmin을 통해 이러한 레코드를 수동으로 삭제하면 일정 시간 후에 레코드가 자동으로 생성됩니다.

그러나 작업 상태는 '보류 중'이며 완료되지 않습니다. 구성에 문제가 있는지 또는 누락 된 것이 있는지 확실하지 않습니다. 예약 된 작업을 제 시간에 실행하는 방법을 알려주십시오. 또한 하나의 작업 코드에 대해 여러 개의 레코드가 생성되는 이유는 무엇입니까?

최신 정보

전체 테이블을 지우고 cron이 예약 된 작업을 작성했습니다. 모든 작업이 보류 상태이며 60 분 이상 대기해도 실행되지 않습니다. 마 젠토 1.9.1에 문제가 있습니다

11/02 업데이트 : 오늘 프로세스에 대한 추가 분석을 수행했습니다.

cron.php를 아래와 같이 편집했습니다.

echo 'iam before mdefault 1';
shell_exec("/bin/sh $baseDir/cron.sh $fileName -mdefault 1 > /dev/null 2>&1 &");
echo 'iam before malways 1';
shell_exec("/bin/sh $baseDir/cron.sh $fileName -malways 1 > /dev/null 2>&1 &");
echo 'i returned success';

Mage_Cron_Model_Observer 클래스를 아래와 같이 편집했습니다.

public function dispatch($observer) {
  echo 'iam inside dispath';

cron이 -mdefault를 실행할 때 디스패치 함수를 호출해야하며 실행이 발생한다는 것을 이해했습니다. 그러나 cron 출력에서 ​​다음과 같이 발생했습니다.

Content-type: text/html

iam before mdefault 1iam before malways 1i returned success

파견이 전혀 호출되지 않았다는 것을 의미합니다 ...

다른 시도

변수를 수동으로 변경하고 $isShellDisabled = true;cron.php에서 아래를 변경했습니다.

if ($isShellDisabled) {
  echo 'before always';
  Mage::dispatchEvent('always');
  echo 'after always';
  Mage::dispatchEvent('default');
  echo 'after default';
} else {
  Mage::dispatchEvent($cronMode);
}

위의 cron 출력은 다음과 같습니다.

Content-type: text/html

before alwaysiam inside dispath alwaysafter always

이제는 'dispatchAlways'를 호출하지만 'dispatch'는 호출하지 않습니다.

어떤 대답도 도움이되지 않습니다. 예약 된 작업을 선택하지 않습니다. 즉, Cron이 처음 실행될 때 테이블에서 작업을 성공적으로 만들었습니다. 그러나 결코 작업을 실행하지 않습니다.


웹 브라우저에서 cron.php를 실행하면 어떻게됩니까? 빈 페이지가되지만 cron 작업에는 어떤 영향이 있습니까?
seanbreeden

*/5 * * * * /bin/sh PATH_TO_PRODUCTION/cron.sh가능한 경우 bash 스크립트를 사용해보십시오 .
Phil Birnie

@seanbreeden, 브라우저에서 URL을 통해 실행하면 빈 페이지가 표시됩니다. 아무 일도 일어나지
않았습니다

@PhilB, .sh는 아무런 차이가 없습니다. 보류중인 작업이 영원히 보류되는 것과 비슷하지만 5 분마다 cron이 실행되고 있다고 확신합니다.
Malaiselvan

cron_schedule테이블 을 비우려고 했 습니까? 한 시간 정도 지나면 새로운 작업으로 채워져 있는지 확인
Sander Mangel

답변:


3

Cron Jobs의 PHP 버전이었습니다.

PHP 버전이 사이트에 올바르게 설정 되었기 때문에 사이트가 작동했습니다. 그러나 Cron Jobs는 서버 네이티브 PHP 5.3에서 실행 중이므로 Cron을 실행할 때만 오류가 발생했습니다. 버전 5.5로 업데이트했습니다.

변경된 Cron 명령 :

php /home/mydomainname/public_html/cron.php
to
php55 /home/mydomainname/public_html/cron.php

또는 hostgator에서 :

/opt/php55/bin/php /home/mydomainname/public_html/cron.php

cron.php에서

$isShellDisabled = (stripos(PHP_OS, 'win') === false) ? $isShellDisabled : true;

이 줄 뒤에 다음을 추가하십시오.

$isShellDisabled = true;

특정 PHP 버전 (내 경우에는 ea-php70)에서 cron.php를 실행하면 php -v터미널에서 실행 하여 PHP 버전을 확인합니다. 제 경우에는 5.6이었습니다. 그래서로 변경 php하여 PHP 7.0을 강제로 사용해야 ea-php70했습니다 crontab -e. 감사!
Daan van den Bergh

2

cron_schedule테이블 을 비우려고 했 습니까? 한 시간 정도 지나면 새로운 작업으로 채워져 있는지 확인하십시오.

또한 Aoe_Scheduler 를 사용하여 특정 크론 작업 을 비활성화 할 수 있습니다 . 특정 작업으로 인해 다른 모든 작업이 중단되는 오류가 발생할 수 있는지 확인하십시오.

Magento cronjobs가 스크립트에서 치명적인 오류를 설정하는 방식으로 인해 모든 작업 실행이 실패합니다


답변 해주셔서 감사합니다. 치명적인 오류가 로그에 캡처됩니까? 내 사건에 대한 몇 가지 결과를 더 업데이트하고 내 질문에서 동일하게 업데이트했습니다.
Malaiselvan

@seanbreeden : 오늘 웹 브라우저를 통해 Cron.php를 시작할 때 일정을 선택하면 훌륭하게 작동한다는 것을 알았습니다. 이는 스크립트에 치명적인 오류가 없음을 나타냅니다. 왜 cron이 crontab을 통해 실행되지 않는지 알고 있습니까?
Malaiselvan

2

첫 번째 단계로 설정을 Magento의 기본 cron 설정으로 되돌릴 것을 제안합니다.

마 젠토 크론 기본값

현재 설정에 문제가 있습니다. 예약은 15 분마다 생성되지만 5 분 동안 만 예약되므로 10 분 간격이 남습니다.


감사. 기본값으로 재설정 한 후에도 작동하지 않습니다. 처음 실행될 때 스케줄 된 시간으로 cron_schedule 테이블에 모든 작업이 작성되었습니다. 작업은 선택되지 않으며 계속 보류중인 상태로 테이블에 유지됩니다. 설정 후 $isShellDisabled = true;와 브라우저를 통해 Cron.php를 시작할 때 CronTab이 아닌 작업이 선택됩니다.
Malaiselvan

이 문제는 아직 해결되지 않았습니다. 호스팅 제공 업체에 문제가 있습니까? 스크립트가 정기적으로 트리거되는 것을 볼 수 있지만 작업 만 선택되지는 않습니다. 1.8에서 마이그레이션 한 후에도 문제가 있습니까?
Malaiselvan

cronjob에 충분한 메모리가 있습니까? 오류 로그를보고 도움이 될만한 것이 있는지 확인하십시오.
Kristof at Fooman

이 문제는 아직 해결되지 않았습니다 ... 매일 나는 머리를 아프게합니다. 오류 로그? 어디서 볼 수 있습니까?
Malaiselvan

@Malaiselvan에 대한 오류 로그는 위치 및 서버 오류 로그에 액세스하는 방법을 알아야하므로 시스템 관리자 나 웹 호스트에게 문의하십시오. 또한 명령 행에서 cron 작업을 수동으로 실행하는 데 도움이 될 수 있습니다. 둘 다 시도 php -f cron.php하고 ./cron.sh추가 조사를 위해 무언가를 생성하는지 확인하십시오.
Fooman의 Kristof

1

나에게도 같은 문제입니다.

"너무 늦었습니다 ..."오류가 발견되었습니다.

cron_schedule테이블을 정리 한 후 cron.sh의 작동이 중지되었습니다 (더 이상 예약하지 않음).

모든 오래된 Cron 프로세스를 종료 한 후에 만 ​​작동했습니다.


필자의 경우 Cron이 처음 실행될 때 테이블에 작업을 성공적으로 만들었습니다. 그러나 결코 작업을 실행하지 않습니다. :-(
Malaiselvan

1

나는 같은 문제가 있었다. 내 문제는 시간대별로 다릅니다. 표의 created_atscheduled_at열은 cron_scheduleUTC + 0이어야하며 내 항목은 UTC + 2입니다.

이를 확인하려면 당신은 단순히에서 날짜를 설정할 수 있습니다 created_atscheduled_at다음 크론 스케줄 때까지 어제와 대기에.

누군가를 돕는 희망!


1

Bluehost에서 cron.sh 변경

 PHP_BIN=`which php`

 PHP_BIN="php54s"

공유 호스팅에서는 기본적으로 PHP 5.2를 실행합니다.

나는 또한 cron.php$isShellDisabled줄을 바꿔서 바꿔야 했다. $isShellDisabled = true;

PHP 경고를 없애기 위해 다음 줄도 추가했습니다.

$_SERVER['SCRIPT_NAME'] = 

if (empty($_SERVER['SCRIPT_FILENAME'])) $_SERVER['SCRIPT_FILENAME'] = '~/public_html/cron.php';
if (empty($_SERVER['SCRIPT_NAME'])) $_SERVER['SCRIPT_NAME'] = '/cron.php';
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.