Magento cron 작업은 어떤 시간대에서 실행됩니까?


11

내 시스템 시간대는 US / Eastern 이고 기본 저장소는 US / Central 이고 데이터베이스는 UTC 입니다. 다음 doStuff방법은 몇시에 호출됩니까?

<mymodule_do_stuff>
    <schedule><cron_expr>15 0 * * *</cron_expr></schedule>
    <run>
        <model>mymodule/observer::doStuff</model>
    </run>
</mymodule_do_stuff>

업데이트 :이 스크립트를 실행했습니다.

echo date('r'), PHP_EOL;
require_once 'app/Mage.php';
Mage::app();

echo date('r'), PHP_EOL;

그리고있어

Mon, 30 Dec 2013 18:01:33 -0600
Tue, 31 Dec 2013 00:01:34 +0000

UTC가 내가 사용해야하는 것처럼 보입니다.


날짜 / 시간이 데이터베이스에 UTC로 저장된 시간대의 구성 설정입니다.
Fiasco Labs

답변:


9

사용 된 기본 시간은 Linux의 시스템 시간입니다. date명령 행 의 기능을 사용하여 설정 내용을 찾으십시오.

Magento locale는 상점 설치 중에 지정한 값을 설정하여 이를 덮어 씁니다 . 이는 System > Configuration > General상점 또는 기본 범위 에서 지정됩니다 .


나는 이것이 옳다고 생각하지 않습니다. cron.php date_default_timezone_set('UTC')에서 호출 되는 Magento 호출 Mage::isInstalled(). locale기본 저장소 는 어디에 설정되어 있습니까?
nachito

3
기본적으로 UTC이지만 내가 아는 한 저장소를 초기화 할 때 기본 범위도 sys / config에 설정된 로케일을 사용합니다. 내가 틀렸지 만 상점 범위 0조차도 정의 된 로케일 설정을 사용하는 경우 수정하십시오
Sander Mangel

예, 이것은 M2에 맞습니다.- module-cron/Model/Schedule.php특히 trySchedule()방법 을 살펴보면 구성에서 설정된 UTC에서 표준 시간대로의 변환이 발생하는 위치 (댓글 포함 we assume that all schedules in configuration (crontab.xml and DB tables) are in admin store timezone)
Phil Birnie

3

cron_schedule테이블에 저장된 시간 은 UTC이지만 Magento는 general/locale/timezone작업 실행 여부를 확인할 때 시간을 상점의 구성된 시간대 ( ) 로 변환합니다 .

상점의 크론 작업이 언제 실행되는지 더 잘 알기 위해 Aoe_Scheduler 를 설치 하는 것이 좋습니다.


1

함수의 코드를 보면 :

Mage_Cron_Model_Observer::_generateJobs

예약 된 시간은 PHP 함수 time ()을 기반으로합니다. 이는 PHP에 대해 구성된 시간대를 사용합니다 (특정 구성에 따라 다름). 이것은 시스템 시간대와 같이 구성되어 있다고 말하고 싶습니다 (미국 / 동부).

사용 된 시간대 오프셋에 대한 계산이있는 장소를 찾을 수 없습니다.


나는 이것이 옳다고 생각하지 않습니다. 내 업데이트 참조
nachito

0

파일을 열고 Mage_Cron_Model_ObserverMage :: log ()를
$now = time();줄 바로 앞이나 뒤에 놓으십시오.

public function dispatch($observer)
    {
        $schedules = $this->getPendingSchedules();
        $scheduleLifetime = Mage::getStoreConfig(self::XML_PATH_SCHEDULE_LIFETIME) * 60;
        $now = time();
        Mage::log("cron timezone: " . date_default_timezone_get(), Zend_Log::DEBUG); // this will log the cron timezone into var/log/system.log file
        $jobsRoot = Mage::getConfig()->getNode('crontab/jobs');
        $defaultJobsRoot = Mage::getConfig()->getNode('default/crontab/jobs');
 . . . . .
}

그런 다음 확인 var/log/system.log하면 Magento가 사용한 시간대를 정확하게 알 수 있습니다.


그런 다음 UTC 오프셋을 더하거나 빼서 cron 로그 테이블 또는 다른 곳에 저장된 날짜를 변환하십시오.
Fiasco Labs

0

날짜 / 시간이 데이터베이스에 UTC로 저장된 시간대에 대해 Magento의 로케일 구성 설정에 따라 트리거됩니다.

Magento가 실행되는 시스템 시간대는 Magento의 구성 설정과 분리 될 수 있습니다.

이것은 모두 관찰에 의한 것입니다. 내 서버는 MST를 실행하고 Magento는 PST입니다. 이는 연중 일부 외부 Dron 작업이 DST를 관찰하여 Magento의 Cron 작업과 1 시간 씩 차이가 나는 것을 의미합니다.

확인을 원하면 AOE 스케줄러 모듈을 설치하면 마우스 오버에서 읽을 수 있습니다. 현재 AOE는 16:30 PST (오후 4:30 PST PST)를 보여줍니다.

Runtime: 2013-12-30   Server: 17:44:59 MST   Store: 16:44:59   Zulu: 00:44:59 UTC
Note: All logged times are UTC, your server timezone offset is -07:00 hours from UTC
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.