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を使用する必要があるようです。


データベースにUTCとして保存された日付/時刻を使用したタイムゾーンの構成設定。
Fiasco Labs

回答:


9

使用されるデフォルトの時刻は、Linuxのシステム時刻です。dateコマンドラインの関数を使用して、それが何に設定されているかを調べます。

Magento localeは、ショップのインストール中にを指定したものに設定することで、「上書き」します。これは、System > Configuration > Generalストアごとまたはデフォルトのスコープで指定されます。


これは正しくないと思います。Magentoの呼び出しdate_default_timezone_set('UTC')Mage::isInstalled()cron.phpに呼ばれています。localeデフォルトストアの設定はどこにありますか?
なちと2013

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をインストールして、ストアのcronジョブがいつ実行されているかを把握することをお勧めします。


1

関数のコードを見る:

Mage_Cron_Model_Observer::_generateJobs

スケジュールされた時間は、PHP関数time()に基づいています。これは、PHPの構成済みタイムゾーンを使用します(特定の構成によって異なります)。これは、システムのタイムゾーン(米国/東部)と同じように構成されていると言えます。

使用されているタイムゾーンオフセットの計算がある場所が見つかりませんでした。


これは正しくないと思います。私の更新を参照してください
nachito 2013

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ログテーブルまたは他の場所に保存されている日付を変換します。
Fiasco Labs

0

それらは、データベースにUTCとして保存されている日付/時刻を使用して、タイムゾーンのMagentoのロケール構成設定ごとにトリガーします。

Magentoが実行されているシステムのタイムゾーンは、Magentoの構成設定とは別にすることができます。

これはすべて観察によるものです。私のサーバーはMSTを実行しています。MagentoはPSTです。つまり、1年の一部では、外部のcronジョブは、DSTを監視しているため、Magentoのcronジョブから1時間ずれています。

確認が必要な場合は、AOEスケジューラモジュールをインストールすると、マウスオーバーで読み取ることができます。現在、AOEは16:30 PST(午後4: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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.