Die Zeitzone meines Systems ist US / Eastern , mein Standardspeicher ist US / Central und die Datenbank ist UTC . Wann wird die folgende doStuff
Methode aufgerufen?
<mymodule_do_stuff>
<schedule><cron_expr>15 0 * * *</cron_expr></schedule>
<run>
<model>mymodule/observer::doStuff</model>
</run>
</mymodule_do_stuff>
Update: Ich habe dieses Skript ausgeführt.
echo date('r'), PHP_EOL;
require_once 'app/Mage.php';
Mage::app();
echo date('r'), PHP_EOL;
und bekam
Mon, 30 Dec 2013 18:01:33 -0600
Tue, 31 Dec 2013 00:01:34 +0000
Es sieht also so aus, als ob UTC das ist, was ich verwenden sollte.
configuration
cron
timezone
Nachito
quelle
quelle
Antworten:
Die standardmäßig verwendete Zeit ist die Systemzeit von Linux. Verwenden Sie die
date
Funktion in der Befehlszeile, um herauszufinden, auf was sie eingestellt ist.Magento 'überschreibt' dies, indem es das auf das setzt
locale
, was Sie während der Installation des Shops angegeben haben. Dies wird im BereichSystem > Configuration > General
pro Geschäft oder im Standardbereich angegeben.quelle
date_default_timezone_set('UTC')
inMage::isInstalled()
dem in cron.php genannt. Wo istlocale
der Standardspeicher eingestellt?module-cron/Model/Schedule.php
speziell dietrySchedule()
Methode ansehen , sehen Sie, wo die Konvertierung von UTC in die in der Konfiguration festgelegte Zeitzone stattfindet (einschließlich eines Kommentarswe assume that all schedules in configuration (crontab.xml and DB tables) are in admin store timezone
)Die in der
cron_schedule
Tabelle gespeicherten Zeiten sind in UTC angegeben, aber Magento konvertiert sie in die konfigurierte Zeitzone (general/locale/timezone
) Ihres Geschäfts, wenn überprüft wird, ob ein Job ausgeführt werden soll.Ich empfehle, Aoe_Scheduler zu installieren , um eine bessere Vorstellung davon zu bekommen, wann die Cron-Jobs Ihres Geschäfts ausgeführt werden.
quelle
Betrachten Sie den Code in der Funktion:
Die geplante Zeit basiert auf der PHP-Funktionszeit (), dies verwendet die konfigurierte Zeitzone für PHP (abhängig von Ihrer spezifischen Konfiguration, aber ich würde sagen, dass dies genau wie die Systemzeitzone (US / Ost) konfiguriert ist.
Ich konnte keinen Ort finden, an dem eine Berechnung für den verwendeten Zeitzonenversatz vorliegt.
quelle
Öffnen Sie die Datei
Mage_Cron_Model_Observer
und setzen Sie ein Mage :: log () direkt nach oder vor der$now = time();
ZeileWenn Sie dann überprüfen
var/log/system.log
, können Sie genau wissen, welche Zeitzone von Magento verwendet wurde.quelle
Sie werden gemäß Ihrer Locale-Konfigurationseinstellung in Magento für Ihre Zeitzone ausgelöst, wobei Datum und Uhrzeit als UTC in der Datenbank gespeichert sind.
Die Systemzeitzone, auf der Magento ausgeführt wird, kann von der Konfigurationseinstellung von Magento getrennt werden.
Dies ist alles durch Beobachtung. Auf meinem Server wird MST ausgeführt, Magento ist PST, was bedeutet, dass externe Cron-Jobs für einen Teil des Jahres um 1 Stunde von Magentos Cron-Jobs abweichen, da einer von ihnen die Sommerzeit beobachtet.
Wenn Sie eine Bestätigung wünschen, installieren Sie das AOE Scheduler-Modul und Sie können es über den Mouseover ablesen. Derzeit zeigt AOE 16:30 PST, also 16:30 PST.
quelle