W jakiej strefie czasowej uruchamiane są zadania cron Magento?


11

Strefa czasowa mojego systemu to US / Eastern , mój domyślny sklep to US / Central, a baza danych to UTC . O której godzinie zostanie doStuffwywołana następująca metoda?

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

Aktualizacja: Uruchomiłem ten skrypt.

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

echo date('r'), PHP_EOL;

i dostał

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

Wygląda więc na to, że powinienem używać UTC.


Twoje ustawienie konfiguracji strefy czasowej z datą / godziną zapisaną jako UTC w bazie danych.
Fiasco Labs,

Odpowiedzi:


9

Domyślnym czasem będzie czas systemowy Linuksa. Użyj datefunkcji w wierszu poleceń, aby dowiedzieć się, na co jest ustawiona.

Magento „nadpisuje” to, ustawiając localeto, co podałeś podczas instalacji sklepu. Jest to określone w System > Configuration > Generalmagazynie lub w domyślnym zakresie.


Nie sądzę, że to prawda. Wywołania Magento, date_default_timezone_set('UTC')w Mage::isInstalled()których nazywa się cron.php. Gdzie jest localeustawiony domyślny sklep?
nachito

3
domyślnie jest to UTC, ale o ile wiem, podczas inicjowania sklepu, a więc również domyślnego zakresu, używa ustawień regionalnych ustawionych w sys / config. Popraw mnie, jeśli się mylę, ale nawet zakres sklepu 0 korzysta ze zdefiniowanych ustawień regionalnych
Sander Mangel

Tak, dotyczy to M2 - jeśli spojrzysz na module-cron/Model/Schedule.phptrySchedule()metodę, zobaczysz, gdzie ma miejsce konwersja z UTC na strefę czasową ustawioną w konfiguracji (w tym komentarz stwierdzający we assume that all schedules in configuration (crontab.xml and DB tables) are in admin store timezone)
Phil Birnie

3

Czasy zapisane w cron_scheduletabeli są w UTC, ale Magento konwertuje ją na skonfigurowaną strefę czasową ( general/locale/timezone) sklepu podczas sprawdzania, czy zadanie powinno zostać uruchomione.

Zalecam zainstalowanie Aoe_Scheduler, aby uzyskać lepszy obraz tego, kiedy uruchamiane są zadania crona twojego sklepu.


1

Patrząc na kod w funkcji:

Mage_Cron_Model_Observer::_generateJobs

Zaplanowany czas jest oparty na funkcji PHP time (), wykorzystuje to skonfigurowaną strefę czasową dla PHP (w zależności od konkretnej konfiguracji, ale powiedziałbym, że jest skonfigurowana tak jak systemowa strefa czasowa (USA / Wschodnia).

Nie mogłem znaleźć miejsca, w którym jest obliczenie zastosowanego przesunięcia strefy czasowej.


Nie sądzę, że to prawda. Zobacz moją aktualizację
nachito

0

Otwórz plik Mage_Cron_Model_Observeri wstaw Mage :: log () tuż po
$now = time();wierszu lub przed nim

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');
 . . . . .
}

Następnie, jeśli sprawdzisz var/log/system.log, możesz dokładnie wiedzieć, która strefa czasowa była używana przez Magento.


A następnie dodaj / odejmij przesunięcie UTC, aby przekonwertować dowolne daty zapisane w tabeli dziennika cron lub w innym miejscu.
Fiasco Labs,

0

Są one uruchamiane zgodnie z ustawieniami konfiguracji regionalnej w Magento dla strefy czasowej z datą / godziną zapisaną jako UTC w bazie danych.

Systemowa strefa czasowa, na której działa Magento, może być niezależna od ustawienia konfiguracji Magento.

To wszystko przez obserwację. Mój serwer obsługuje MST, Magento to PST, co oznacza, że ​​przez część roku zewnętrzne zadania cron odbiegają od zadań cron Magento o 1 godzinę, ponieważ jeden z nich obserwuje DST.

Jeśli chcesz potwierdzić, zainstaluj moduł AOE Scheduler i możesz go odczytać po najechaniu myszą. Obecnie AOE pokazuje 16:30 PST, czyli 16:30 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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.