Dans quel fuseau horaire les tâches cron de Magento sont-elles exécutées?

11

Le fuseau horaire de mon système est US / Eastern , mon magasin par défaut est US / Central et la base de données est UTC . À quelle heure la doStuffméthode suivante sera-t-elle appelée?

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

Mise à jour: j'ai exécuté ce script.

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

echo date('r'), PHP_EOL;

et j'ai

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

Il semble donc que l'UTC soit ce que je devrais utiliser.

nachito
la source
Votre paramètre de configuration pour votre fuseau horaire avec la date / heure stockée au format UTC dans la base de données.
Fiasco Labs

Réponses:

9

L'heure par défaut utilisée sera l'heure système de Linux. Utilisez la datefonction sur la ligne de commande pour savoir à quoi elle est définie.

Magento 'écrase' cela en définissant le localesur ce que vous avez spécifié lors de l'installation de la boutique. Ceci est spécifié dans le System > Configuration > Generalpar magasin ou sur la portée par défaut.

Sander Mangel
la source
Je ne pense pas que ce soit juste. Appels Magento date_default_timezone_set('UTC')dans Mage::isInstalled()lesquels est appelé dans cron.php. Où est l' localeensemble du magasin par défaut?
nachito
3
par défaut, c'est UTC mais, pour autant que je sache, lors de l'initialisation d'un magasin, de même que la portée par défaut, utilise les paramètres régionaux définis dans sys / config. Veuillez me corriger si je me trompe, mais même la portée de stockage 0 utilise les paramètres régionaux définis
Sander Mangel
Oui, c'est correct pour M2 - si vous regardez module-cron/Model/Schedule.php, en particulier sous la trySchedule()méthode, vous verrez où la conversion d'UTC en fuseau horaire défini dans la configuration a lieu (y compris un commentaire indiquant we assume that all schedules in configuration (crontab.xml and DB tables) are in admin store timezone)
Phil Birnie
3

Les cron_scheduleheures stockées dans le tableau sont en UTC, mais Magento le convertit en fuseau horaire configuré de votre magasin ( general/locale/timezone) lors de la vérification si un travail doit s'exécuter.

Je recommande d'installer Aoe_Scheduler pour avoir une meilleure idée du moment où les tâches cron de votre magasin sont exécutées.

Steve Robbins
la source
1

En regardant le code dans la fonction:

Mage_Cron_Model_Observer::_generateJobs

L'heure planifiée est basée sur l'heure de la fonction PHP (), cela utilise le fuseau horaire configuré pour PHP (en fonction de votre configuration spécifique mais je dirais que cela est configuré comme le fuseau horaire du système (US / Eastern).

Je n'ai pas pu trouver un endroit où il y a un calcul pour le décalage de fuseau horaire utilisé.

Vladimir Kerkhoff
la source
Je ne pense pas que ce soit juste. Voir ma mise à jour
nachito
0

Ouvrez le fichier Mage_Cron_Model_Observeret placez un Mage :: log () juste après ou avant la
$now = time();ligne

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

Ensuite, si vous cochez, var/log/system.logvous pouvez savoir exactement quel fuseau horaire a été utilisé par Magento.

Sukeshini
la source
Et puis ajoutez / soustrayez le décalage UTC pour convertir toutes les dates stockées dans la table du journal cron ou ailleurs.
Fiasco Labs
0

Ils se déclenchent par votre paramètre de configuration locale dans Magento pour votre fuseau horaire avec la date / heure stockée en UTC dans la base de données.

Le fuseau horaire du système sur lequel Magento s'exécute peut être distinct du paramètre de configuration de Magento.

Tout cela par observation. Mon serveur exécute MST, Magento est PST, ce qui signifie que pendant une partie de l'année, les tâches cron externes s'écartent des tâches cron de Magento d'une heure en raison de l'observation de l'heure d'été par l'un d'entre eux.

Si vous voulez une confirmation, installez le module AOE Scheduler et vous pouvez le lire à la souris. Actuellement, AOE affiche 16h30 PST qui est 16h30 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
Fiasco Labs
la source