나는 거의 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이 처음 실행될 때 테이블에서 작업을 성공적으로 만들었습니다. 그러나 결코 작업을 실행하지 않습니다.
*/5 * * * * /bin/sh PATH_TO_PRODUCTION/cron.sh
가능한 경우 bash 스크립트를 사용해보십시오 .
cron_schedule
테이블 을 비우려고 했 습니까? 한 시간 정도 지나면 새로운 작업으로 채워져 있는지 확인