Часовой пояс моей системы - 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 - это то, что я должен использовать.
configuration
cron
timezone
nachito
источник
источник
Ответы:
По умолчанию используется системное время Linux. Используйте
date
функцию в командной строке, чтобы узнать, на что она установлена.Magento «перезаписывает» это, устанавливая то,
locale
что вы указали во время установки магазина. Это указывается вSystem > Configuration > General
каждом магазине или в области по умолчанию.источник
date_default_timezone_set('UTC')
вMage::isInstalled()
котором вызывается в cron.php. Где находитсяlocale
магазин по умолчанию?module-cron/Model/Schedule.php
, в частности, вtrySchedule()
методе, вы увидите, где происходит преобразование из UTC в часовой пояс, заданный в конфигурации (включая комментарийwe assume that all schedules in configuration (crontab.xml and DB tables) are in admin store timezone
)Времена, хранящиеся в
cron_schedule
таблице, указаны в формате UTC, но Magento преобразует его в настроенный часовой пояс вашего магазина (general/locale/timezone
) при проверке необходимости выполнения задания.Я рекомендую установить Aoe_Scheduler, чтобы лучше понять, когда выполняются задания cron вашего магазина.
источник
Глядя на код в функции:
Запланированное время основано на функции PHP time (), в ней используется настроенный часовой пояс для PHP (в зависимости от вашей конкретной конфигурации, но) Я бы сказал, что он настроен так же, как системный часовой пояс (США / Восточный).
Я не смог найти место, где есть расчет для использованного смещения часового пояса.
источник
Откройте файл
Mage_Cron_Model_Observer
и поместите Mage :: log () сразу после или перед$now = time();
строкойТогда, если вы проверите,
var/log/system.log
вы можете точно знать, какой часовой пояс был использован Magento.источник
Они запускаются в соответствии с настройками Locale в Magento для вашего часового пояса с датой / временем, сохраненными в базе данных как UTC.
Часовой пояс системы, в котором работает Magento, может отличаться от настроек конфигурации Magento.
Это все по наблюдению. Мой сервер работает с MST, Magento - это PST, что означает, что в течение года внешние задания cron расходятся с заданиями Magento cron на 1 час из-за того, что один из них наблюдает DST.
Если вы хотите подтверждение, установите модуль планировщика AOE, и вы можете прочитать его с помощью наведения мыши. В настоящее время AOE показывает 16:30 PST, то есть 16:30 PST.
источник