In quale fuso orario vengono eseguiti i lavori cron di Magento?


11

Il fuso orario del mio sistema è US / Eastern , il mio archivio predefinito è US / Central e il database è UTC . A che ora verrà doStuffchiamato il seguente metodo?

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

Aggiornamento: ho eseguito questo script.

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

echo date('r'), PHP_EOL;

e ottenuto

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

Quindi sembra che UTC sia quello che dovrei usare.


Le tue impostazioni di configurazione per il tuo fuso orario con data / ora memorizzate come UTC nel database.
Fiasco Labs

Risposte:


9

Il tempo predefinito utilizzato sarà il tempo di sistema di Linux. Utilizzare la datefunzione nella riga di comando per scoprire su cosa è impostata.

Magento lo "sovrascrive" impostandolo localesu qualsiasi cosa tu abbia specificato durante l'installazione del negozio. Questo è specificato nell'archivio System > Configuration > Generalper negozio o nell'ambito predefinito.


Non penso sia giusto. Magento chiama date_default_timezone_set('UTC')in Mage::isInstalled()cui si chiama in cron.php. Dov'è localeimpostato l'archivio predefinito?
nachito,

3
per impostazione predefinita è UTC ma, per quanto ne so, quando si inizializza un negozio, quindi anche l'ambito predefinito, utilizza la locale impostata in sys / config. Per favore, correggimi se sbaglio, ma anche lo scope 0 del negozio usa le impostazioni locali definite
Sander Mangel

Sì, questo è corretto per M2 - se guardi module-cron/Model/Schedule.php, in particolare con il trySchedule()metodo, vedrai dove avviene la conversione da UTC a fuso orario impostato nella configurazione (incluso un commento che indica we assume that all schedules in configuration (crontab.xml and DB tables) are in admin store timezone)
Phil Birnie

3

I tempi memorizzati nella cron_scheduletabella sono in UTC, ma Magento lo converte nel fuso orario configurato del tuo negozio ( general/locale/timezone) quando verifica se un lavoro deve essere eseguito.

Ti consiglio di installare Aoe_Scheduler per avere una migliore idea di quando vengono eseguiti i lavori cron del tuo negozio.


1

Guardando il codice nella funzione:

Mage_Cron_Model_Observer::_generateJobs

Il tempo pianificato si basa sul tempo della funzione PHP (), questo utilizza il fuso orario configurato per PHP (in base alla configurazione specifica, ma) direi che questo è configurato proprio come il fuso orario del sistema (USA / Est).

Non sono riuscito a trovare un luogo in cui è presente un calcolo per l'offset del fuso orario utilizzato.


Non penso sia giusto. Vedi il mio aggiornamento
nachito,

0

Apri il file Mage_Cron_Model_Observere inserisci un Mage :: log () subito dopo o prima della
$now = time();riga

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

Quindi se controlli var/log/system.logpuoi sapere esattamente quale fuso orario è stato utilizzato da Magento.


E quindi aggiungere / sottrarre l'offset UTC per convertire le date memorizzate nella tabella del registro cron o altrove.
Fiasco Labs

0

Si attivano in base all'impostazione di configurazione Locale in Magento per il fuso orario con data / ora memorizzate come UTC nel database.

Il fuso orario di sistema su cui è in esecuzione Magento può essere separato dall'impostazione di configurazione di Magento.

Questo è tutto per osservazione. Il mio server esegue MST, Magento è PST, il che significa che per una parte dell'anno, i lavori cron esterni divergono dai lavori cron di Magento di 1 ora a causa di uno di essi che osserva l'ora legale.

Se vuoi la conferma, installa il modulo AOE Scheduler e puoi leggerlo al passaggio del mouse. Attualmente AOE mostra 16:30 PST che è 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.