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格式存储在数据库中。
Fiasco Labs

Answers:


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为单位,但是general/locale/timezone在检查是否应运行作业时,Magento会将其转换为商店的配置时区()。

我建议安装Aoe_Scheduler,以更好地了解何时运行商店的cron作业。


1

查看函数中的代码:

Mage_Cron_Model_Observer::_generateJobs

计划时间是基于PHP函数time()的,它使用PHP的配置时区(取决于您的特定配置,但是)我要说的是,配置时间与系统时区(美国/东部)相同。

我找不到可以计算使用的时区偏移量的地方。


我认为这是不对的。查看我的更新
nachito 2013年

0

打开文件Mage_Cron_Model_Observer
$now = time();在行之后或之前放置Mage :: log()

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日志表或其他地方的任何日期。
Fiasco Labs

0

它们会根据您在时区的Magento中的“语言环境”配置设置触发,并将日期/时间存储为数据库中的UTC。

Magento运行所在的系统时区可以与Magento的配置设置分开。

这一切都是通过观察。我的服务器运行MST,Magento是PST,这意味着在一年的一部分时间内,外部cron作业与Magento的cron作业相差1个小时,原因是其中一个遵守DST。

如果要确认,请安装AOE Scheduler模块,然后将其从鼠标悬停中读取。目前,AOE正在显示太平洋标准时间下午16:30(太平洋标准时间)。

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.