В каком часовом поясе работают рабочие места Magento cron?

11

Часовой пояс моей системы - US / Eastern , мой магазин по умолчанию - US / Central, а база данных - 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 - это то, что я должен использовать.

nachito
источник
Ваши настройки для вашего часового пояса с датой / временем сохраняются как UTC в базе данных.
Fiasco Labs

Ответы:

9

По умолчанию используется системное время Linux. Используйте dateфункцию в командной строке, чтобы узнать, на что она установлена.

Magento «перезаписывает» это, устанавливая то, localeчто вы указали во время установки магазина. Это указывается в System > Configuration > Generalкаждом магазине или в области по умолчанию.

Сандер Мангель
источник
Я не думаю, что это правильно. Magento вызывает, date_default_timezone_set('UTC')в Mage::isInstalled()котором вызывается в cron.php. Где находится localeмагазин по умолчанию?
Начит
3
по умолчанию это UTC, но, насколько мне известно, при инициализации магазина, а также области действия по умолчанию, используется языковой стандарт, установленный в sys / config. Пожалуйста, исправьте меня, если я ошибаюсь, но даже в области хранения 0 используются определенные настройки локали
Сандер Мангель
Да, это верно для 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)
Фил Бирни
3

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

Я рекомендую установить Aoe_Scheduler, чтобы лучше понять, когда выполняются задания cron вашего магазина.

Стив Роббинс
источник
1

Глядя на код в функции:

Mage_Cron_Model_Observer::_generateJobs

Запланированное время основано на функции PHP time (), в ней используется настроенный часовой пояс для PHP (в зависимости от вашей конкретной конфигурации, но) Я бы сказал, что он настроен так же, как системный часовой пояс (США / Восточный).

Я не смог найти место, где есть расчет для использованного смещения часового пояса.

Владимир Керхофф
источник
Я не думаю, что это правильно. Смотрите мое обновление
начито
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.

Sukeshini
источник
А затем добавьте / вычтите смещение UTC, чтобы преобразовать любые даты, хранящиеся в таблице журнала cron или где-либо еще.
Fiasco Labs
0

Они запускаются в соответствии с настройками Locale в Magento для вашего часового пояса с датой / временем, сохраненными в базе данных как UTC.

Часовой пояс системы, в котором работает Magento, может отличаться от настроек конфигурации Magento.

Это все по наблюдению. Мой сервер работает с MST, Magento - это PST, что означает, что в течение года внешние задания cron расходятся с заданиями Magento cron на 1 час из-за того, что один из них наблюдает DST.

Если вы хотите подтверждение, установите модуль планировщика AOE, и вы можете прочитать его с помощью наведения мыши. В настоящее время 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
Fiasco Labs
источник