¿En qué zona horaria se ejecutan los trabajos cron de Magento?

11

La zona horaria de mi sistema es US / Eastern , mi tienda predeterminada es US / Central y la base de datos es UTC . ¿A qué hora se llamará el siguiente doStuffmétodo?

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

Actualización: ejecuté este script.

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

echo date('r'), PHP_EOL;

y consiguió

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

Entonces parece que UTC es lo que debería estar usando.

nachito
fuente
Su configuración de configuración para su zona horaria con fecha / hora almacenada como UTC en la base de datos.
Fiasco Labs

Respuestas:

9

El tiempo predeterminado utilizado será el tiempo del sistema de Linux. Use la datefunción en la línea de comando para averiguar en qué está configurado.

Magento "sobrescribe" eso al configurar localelo que haya especificado durante la instalación de la tienda. Esto se especifica en el System > Configuration > Generalpor tienda o en el ámbito predeterminado.

Sander Mangel
fuente
No creo que esto sea correcto. Llamadas de Magento date_default_timezone_set('UTC')en las Mage::isInstalled()que se llama en cron.php. ¿Dónde está el localeconjunto de la tienda predeterminada?
nachito
3
por defecto es UTC pero, hasta donde yo sé, al inicializar una tienda, también el alcance predeterminado, usa la configuración regional establecida en sys / config. Corríjame si me equivoco, pero incluso el alcance de la tienda 0 usa la configuración regional definida
Sander Mangel
Sí, esto es correcto para M2: si observa module-cron/Model/Schedule.php, específicamente bajo el trySchedule()método, verá dónde tiene lugar la conversión de UTC a la zona horaria establecida en la configuración (incluido un comentario que indica we assume that all schedules in configuration (crontab.xml and DB tables) are in admin store timezone)
Phil Birnie
3

Los tiempos almacenados en la cron_scheduletabla están en UTC, pero Magento lo convierte a la zona horaria configurada de su tienda ( general/locale/timezone) al verificar si un trabajo debe ejecutarse.

Recomiendo instalar Aoe_Scheduler para tener una mejor idea de cuándo se ejecutan los trabajos cron de su tienda.

Steve Robbins
fuente
1

Mirando el código en la función:

Mage_Cron_Model_Observer::_generateJobs

El tiempo programado se basa en el tiempo de la función PHP (), esto usa la zona horaria configurada para PHP (dependiendo de su configuración específica, pero) Diría que está configurada al igual que la zona horaria del sistema (EE. UU. / Este).

No pude encontrar un lugar donde haya un cálculo para el desplazamiento de la zona horaria utilizada.

Vladimir Kerkhoff
fuente
No creo que esto sea correcto. Ver mi actualización
nachito
0

Abra el archivo Mage_Cron_Model_Observery coloque un Mage :: log () justo después o antes de la
$now = time();línea

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

Luego, si marca var/log/system.log, puede saber exactamente qué zona horaria ha utilizado Magento.

Sukeshini
fuente
Y luego sume / reste el desplazamiento UTC para convertir cualquier fecha almacenada en la tabla de registro cron o en otro lugar.
Fiasco Labs
0

Se activan según su configuración de configuración regional en Magento para su zona horaria con fecha / hora almacenada como UTC en la base de datos.

La zona horaria del sistema en la que se ejecuta Magento puede estar separada de la configuración de configuración de Magento.

Todo esto es por observación. Mi servidor ejecuta MST, Magento es PST, lo que significa que durante parte del año, los trabajos cron externos divergen de los trabajos cron de Magento en 1 hora debido a que uno de ellos observa DST.

Si desea confirmación, instale el módulo AOE Scheduler y podrá leerlo desde el mouseover. Actualmente, AOE muestra las 16:30 PST que son las 4:30 PM 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
Laboratorios Fiasco
fuente