У якому часовому поясі виконуються роботи Magento cron?


11

Часовий пояс моєї системи - США / Східний , моє сховище за замовчуванням - США / Центральне, а база даних - UTC . У який час буде doStuffвикликаний наступний метод?

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

Оновлення: я запустив цей сценарій.

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

echo date('r'), PHP_EOL;

і отримав

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

Так виглядає, що UTC - це те, що я повинен використовувати.


Ваша настройка конфігурації для вашого часового поясу з датою / часом, збереженою як UTC у базі даних.
Лабораторії Фіаско

Відповіді:


9

За замовчуванням використовуваний системний час linux. Використовуйте dateфункцію в командному рядку, щоб дізнатися, для чого він встановлений.

Magento "перезаписує" це, встановлюючи localeвсе, що ви вказали під час встановлення магазину. Це вказано в System > Configuration > Generalмагазині або за умовчанням.


Я не думаю, що це правильно. Magento викликає, date_default_timezone_set('UTC')в Mage::isInstalled()якому викликається в cron.php. Де localeвстановлений магазин за замовчуванням?
nachito

3
за замовчуванням це UTC, але, наскільки я знаю, при ініціалізації магазину, а також області за замовчуванням використовується локальний набір у sys / config. Виправте мене, якщо я помиляюся, але навіть магазин 0 використовує визначені параметри місцевості
Sander Mangel

Так, це правильно для M2 - якщо ви подивитеся module-cron/Model/Schedule.phpконкретно на trySchedule()метод, ви побачите, де відбувається перетворення з UTC у часовий пояс, встановлений у конфігурації (включаючи коментар із зазначенням we assume that all schedules in configuration (crontab.xml and DB tables) are in admin store timezone)
Phil Birnie

3

Часи, що зберігаються в cron_scheduleтаблиці, знаходяться в UTC, але Magento перетворює його у налаштований часовий пояс ( general/locale/timezone) магазину під час перевірки, чи має виконуватися завдання.

Рекомендую встановити Aoe_Scheduler, щоб отримати краще уявлення про те, коли виконуються роботи магазину з крон.


1

Дивлячись на код у функції:

Mage_Cron_Model_Observer::_generateJobs

Запланований час ґрунтується на часі функції PHP (), для цього використовується налаштований часовий пояс для PHP (залежно від вашої конкретної конфігурації), але я б сказав, що це налаштовано так само, як системний часовий пояс (США / Схід).

Не вдалося знайти місце, де є розрахунок за використане зміщення часового поясу.


Я не думаю, що це правильно. Дивіться моє оновлення
nachito

0

Відкрийте файл Mage_Cron_Model_Observerі поставте Mage :: log () після або перед
$now = time();рядком

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

Тоді якщо ви перевірите, var/log/system.logви можете точно знати, який часовий пояс використовував Magento.


А потім додайте / віднімайте зсув UTC для перетворення будь-яких дат, збережених у таблиці журналів cron або деінде.
Лабораторії Фіаско

0

Вони спрацьовують за вашим налаштуванням локальної конфігурації в Magento для вашого часового поясу з датою / часом, збереженим як UTC у базі даних.

Часовий пояс системи, на якому працює Magento, може бути окремим від налаштування Magento.

Це все шляхом спостереження. Мій сервер працює з MST, Magento - це PST, а це означає, що протягом однієї години робочі місця на зовнішніх крон відхиляються від роботи Cron Magento на 1 годину через те, що один із них спостерігає за DST.

Якщо ви хочете підтвердити, встановіть модуль AOE Scheduler і зможете прочитати його за допомогою миші. На даний момент AOE показує 16:30 PST, що становить 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.