Zona waktu apa pekerjaan cron Magento dijalankan?

11

Zona waktu sistem saya adalah AS / Timur , toko default saya adalah AS / Pusat dan basis datanya adalah UTC . Pada jam berapa doStuffmetode berikut ini akan dipanggil?

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

Pembaruan: Saya menjalankan skrip ini.

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

echo date('r'), PHP_EOL;

dan mendapatkan

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

Jadi sepertinya UTC adalah yang seharusnya saya gunakan.

nachito
sumber
Pengaturan konfigurasi Anda untuk zona waktu Anda dengan tanggal / waktu disimpan sebagai UTC dalam database.
Fiasco Labs

Jawaban:

9

Waktu default yang digunakan adalah waktu sistem linux. Gunakan datefungsi pada baris perintah untuk mencari tahu apa itu diatur.

Magento 'menimpa' itu dengan mengatur localeapa pun yang telah Anda tentukan selama pemasangan toko. Ini ditentukan dalam System > Configuration > Generalper toko atau pada lingkup default.

Sander Mangel
sumber
Saya pikir ini tidak benar. Panggilan Magento date_default_timezone_set('UTC')di Mage::isInstalled()yang disebut di cron.php. Di mana localeset ke toko default?
nachito
3
secara default itu UTC tetapi, sejauh yang saya tahu, ketika menginisialisasi toko jadi juga ruang lingkup default, menggunakan lokal yang ditetapkan di sys / config. Harap perbaiki saya jika saya salah tetapi bahkan ruang lingkup toko 0 menggunakan pengaturan lokal yang ditentukan
Sander Mangel
Ya, ini benar untuk M2 - jika Anda melihat module-cron/Model/Schedule.php, khususnya di bawah trySchedule()metode ini, Anda akan melihat di mana konversi dari UTC ke zona waktu yang diatur dalam konfigurasi berlangsung (termasuk komentar yang menyatakan we assume that all schedules in configuration (crontab.xml and DB tables) are in admin store timezone)
Phil Birnie
3

Waktu yang disimpan dalam cron_scheduletabel adalah dalam UTC, tetapi Magento mengonversinya ke zona waktu yang dikonfigurasikan toko Anda ( general/locale/timezone) ketika memeriksa apakah suatu pekerjaan harus dijalankan.

Saya sarankan menginstal Aoe_Scheduler untuk mendapatkan ide yang lebih baik tentang kapan pekerjaan cron toko Anda dijalankan.

Steve Robbins
sumber
1

Melihat kode dalam fungsi:

Mage_Cron_Model_Observer::_generateJobs

Waktu yang dijadwalkan didasarkan pada waktu fungsi PHP (), ini menggunakan zona waktu yang dikonfigurasi untuk PHP (tergantung pada konfigurasi spesifik Anda tetapi) Saya akan mengatakan bahwa ini dikonfigurasi seperti zona waktu sistem (AS / Timur).

Saya tidak bisa menemukan tempat di mana ada perhitungan untuk zona waktu yang digunakan.

Vladimir Kerkhoff
sumber
Saya pikir ini tidak benar. Lihat pembaruan saya
nachito
0

Buka file Mage_Cron_Model_Observerdan letakkan Mage :: log () tepat setelah atau sebelum
$now = time();baris

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

Kemudian jika Anda memeriksa, var/log/system.logAnda bisa tahu persis zona waktu mana yang telah digunakan oleh Magento.

Sukeshini
sumber
Dan kemudian tambahkan / kurangi UTC offset untuk mengonversi tanggal yang disimpan di tabel log cron atau di tempat lain.
Fiasco Labs
0

Mereka memicu per pengaturan konfigurasi Lokal Anda di Magento untuk zona waktu Anda dengan tanggal / waktu disimpan sebagai UTC dalam database.

Zona waktu sistem yang dijalankan Magento dapat dipisahkan dari pengaturan konfigurasi Magento.

Ini semua dengan observasi. Server saya menjalankan MST, Magento adalah PST yang berarti bahwa untuk sebagian tahun ini, pekerjaan cron eksternal berbeda dari pekerjaan cron Magento selama 1 jam karena salah satu dari mereka mengamati DST.

Jika Anda ingin konfirmasi, instal modul AOE Scheduler dan Anda dapat membacanya dari mouseover. Saat ini AOE menunjukkan 16:30 PST yaitu 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
Laboratorium Fiasco
sumber