In welcher Zeitzone werden Magento-Cron-Jobs ausgeführt?


11

Die Zeitzone meines Systems ist US / Eastern , mein Standardspeicher ist US / Central und die Datenbank ist UTC . Wann wird die folgende doStuffMethode 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.


Ihre Konfigurationseinstellung für Ihre Zeitzone mit Datum / Uhrzeit, die als UTC in der Datenbank gespeichert sind.
Fiasco Labs

Antworten:


9

Die standardmäßig verwendete Zeit ist die Systemzeit von Linux. Verwenden Sie die dateFunktion 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 Bereich System > Configuration > Generalpro Geschäft oder im Standardbereich angegeben.


Ich denke nicht, dass das richtig ist. Magento Anrufe date_default_timezone_set('UTC')in Mage::isInstalled()dem in cron.php genannt. Wo ist localeder Standardspeicher eingestellt?
Nachito

3
Standardmäßig ist es UTC, aber soweit ich weiß, wird beim Initialisieren eines Geschäfts, also auch des Standardbereichs, das in sys / config festgelegte Gebietsschema verwendet. Bitte korrigieren Sie mich, wenn ich falsch liege, aber selbst Speicherbereich 0 verwendet die definierten Gebietsschemaeinstellungen
Sander Mangel

Ja, dies ist für M2 korrekt. Wenn Sie sich module-cron/Model/Schedule.phpspeziell die trySchedule()Methode ansehen , sehen Sie, wo die Konvertierung von UTC in die in der Konfiguration festgelegte Zeitzone stattfindet (einschließlich eines Kommentars we assume that all schedules in configuration (crontab.xml and DB tables) are in admin store timezone)
Phil Birnie,

3

Die in der cron_scheduleTabelle 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.


1

Betrachten Sie den Code in der Funktion:

Mage_Cron_Model_Observer::_generateJobs

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.


Ich denke nicht, dass das richtig ist. Siehe mein Update
Nachito

0

Öffnen Sie die Datei Mage_Cron_Model_Observerund setzen Sie ein Mage :: log () direkt nach oder vor der
$now = time();Zeile

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

Wenn Sie dann überprüfen var/log/system.log, können Sie genau wissen, welche Zeitzone von Magento verwendet wurde.


Fügen Sie dann den UTC-Offset hinzu / subtrahieren Sie ihn, um alle in der Cron-Protokolltabelle oder an anderer Stelle gespeicherten Daten zu konvertieren.
Fiasco Labs

0

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.

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.