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 doStuff
wywoł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.
configuration
cron
timezone
nachito
źródło
źródło
Odpowiedzi:
Domyślnym czasem będzie czas systemowy Linuksa. Użyj
date
funkcji w wierszu poleceń, aby dowiedzieć się, na co jest ustawiona.Magento „nadpisuje” to, ustawiając
locale
to, co podałeś podczas instalacji sklepu. Jest to określone wSystem > Configuration > General
magazynie lub w domyślnym zakresie.źródło
date_default_timezone_set('UTC')
wMage::isInstalled()
których nazywa się cron.php. Gdzie jestlocale
ustawiony domyślny sklep?module-cron/Model/Schedule.php
tętrySchedule()
metodę, zobaczysz, gdzie ma miejsce konwersja z UTC na strefę czasową ustawioną w konfiguracji (w tym komentarz stwierdzającywe assume that all schedules in configuration (crontab.xml and DB tables) are in admin store timezone
)Czasy zapisane w
cron_schedule
tabeli 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.
źródło
Patrząc na kod w funkcji:
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.
źródło
Otwórz plik
Mage_Cron_Model_Observer
i wstaw Mage :: log () tuż po$now = time();
wierszu lub przed nimNastępnie, jeśli sprawdzisz
var/log/system.log
, możesz dokładnie wiedzieć, która strefa czasowa była używana przez Magento.źródło
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.
źródło