เขตเวลาอะไรที่ทำงานใน 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

คำตอบ:


9

เวลาเริ่มต้นที่ใช้จะเป็นเวลาของระบบของ linux ใช้dateฟังก์ชั่นในบรรทัดคำสั่งเพื่อค้นหาสิ่งที่ตั้งไว้

วีโอไอพี 'เขียนทับ' โดยการตั้งค่าเป็นlocaleสิ่งที่คุณระบุในระหว่างการติดตั้งของร้าน มีการระบุในSystem > Configuration > Generalร้านค้าต่อหรือตามขอบเขตเริ่มต้น


ฉันไม่คิดว่ามันถูกต้อง โทรวีโอไอพี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 แต่ Magento แปลงให้เป็นเขตเวลาที่กำหนด ( general/locale/timezone) ของร้านค้าของคุณเมื่อตรวจสอบว่างานควรจะทำงานหรือไม่

ฉันแนะนำให้ติดตั้งAoe_Schedulerเพื่อให้ได้แนวคิดที่ดีขึ้นว่าเมื่อใดที่งาน cron ของร้านค้าของคุณกำลังทำงาน


1

ดูรหัสในฟังก์ชั่น:

Mage_Cron_Model_Observer::_generateJobs

เวลาที่กำหนดจะขึ้นอยู่กับเวลาฟังก์ชั่นของ PHP () ซึ่งจะใช้เขตเวลาที่กำหนดไว้สำหรับ PHP (ขึ้นอยู่กับการกำหนดค่าเฉพาะของคุณ) ฉันจะบอกว่านี่ถูกกำหนดค่าเช่นเดียวกับเขตเวลาของระบบ (สหรัฐฯ / ตะวันออก)

ฉันไม่พบสถานที่ที่มีการคำนวณสำหรับเขตเวลาที่ใช้ชดเชย


ฉันไม่คิดว่ามันถูกต้อง ดูการอัปเดตของฉัน
nachito

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 offset เพื่อแปลงวันที่ใด ๆ ที่เก็บไว้ในตารางบันทึก cron หรือที่อื่น ๆ
Fiasco Labs

0

พวกมันจะทำการตั้งค่า Locale ใน Magento สำหรับเขตเวลาของคุณตามวันที่ / เวลาที่จัดเก็บเป็น UTC ในฐานข้อมูล

เขตเวลาระบบที่ Magento กำลังทำงานอยู่สามารถแยกออกจากการตั้งค่าคอนฟิกของ Magento ได้

ทั้งหมดนี้เกิดจากการสังเกต เซิร์ฟเวอร์ของฉันทำงาน MST, Magento คือ PST ซึ่งหมายความว่าในช่วงเวลาหนึ่งปีงาน cron ภายนอกเบี่ยงเบนจากงาน cron ของ Magento ภายใน 1 ชั่วโมงเนื่องจากหนึ่งในนั้นสังเกต DST

หากคุณต้องการการยืนยันให้ติดตั้งโมดูล AOE Scheduler และคุณสามารถอ่านมันออกจากตัววางเมาส์ ปัจจุบัน 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.