เขตเวลางานแท็บ Magento Cron

ฉันกำลังพยายามคิดว่าโมดูล cron ของฉันทำงานตรงเวลาหรือไม่

cron สำหรับโมดูลของฉันตั้งไว้ที่ 01.00 น. (0 1 * * *) โซนเวลาของร้านค้าเริ่มต้นคือยุโรปตะวันตก (ปารีส เบอร์ลิน ฯลฯ GMT +2) เวลาเซิร์ฟเวอร์คือ EDT (เวลาออมแสงตะวันออก)

แล้วกำหนดการตี 1 ตามเวลาโซนใด

ขอบคุณ,


person Jono    schedule 28.09.2011    source แหล่งที่มา
comment
@Fiasco Labs มีคำตอบที่ถูกต้องที่นี่ ข้อมูลที่คุณมีในไฟล์ XML จะใช้ในการกำหนดเวลาและอยู่ใน TZ เริ่มต้นที่คุณกำหนดค่าไว้สำหรับร้านค้าของคุณ การจัดส่งและการจัดเก็บงานตามกำหนดเวลาทั้งหมดใน DB อยู่ภายใต้ UTC   -  person Lee Saferite    schedule 30.09.2011


คำตอบ (2)


กระบวนการ cron ของ Magento ทำงานภายใต้เขตเวลา UTC

สิ่งนี้สามารถตรวจสอบได้โดยการเพิ่มคำสั่งบันทึกขนาดเล็กชั่วคราวให้กับผู้สังเกตการณ์ cron

วิธีการคือ:

Mage_Cron_Model_Observer::dispatch()

ค้นหารหัสนี้ในสองสามบรรทัดแรก:

$now = time();

ไม่ว่าจะก่อนหรือหลัง ให้เพิ่มสิ่งนี้:

Mage::log("cron timezone: " . date_default_timezone_get(), Zend_Log::DEBUG);

จากนั้นตรวจสอบไฟล์ var/log/system.log ของคุณ แล้วคุณจะเห็นว่า PHP/Magento ใช้เขตเวลา UTC

person Lee Saferite    schedule 28.09.2011
comment
ตามที่ @Fiasco Labs ชี้ให้เห็น อินพุตการกำหนดเวลาจะถือเป็นค่า TZ ที่กำหนดค่าเริ่มต้น ไม่ใช่ UTC ดังนั้นในขณะที่ทุกอย่างได้รับการกำหนดเวลาและส่ง AS UTC ข้อมูลอินพุตจะได้รับการปฏิบัติด้วยออฟเซ็ต TZ ที่เป็นไปได้ - person Lee Saferite; 30.09.2011
comment
ขอบคุณมากสำหรับความรู้ของคุณ! ตามที่ฉันเข้าใจ เวลา cron 01.00 ของฉันจะเป็น 01.00 ตามเวลาของร้านค้าใช่ไหม นั่นคือสิ่งที่ฉันต้องการ! - person Jono; 30.09.2011
comment
ในส่วนที่เกี่ยวกับ Mag::log ฉันเดาถูกหรือไม่ว่าการประทับเวลาของบันทึกนั้นเป็น GMT เสมอ เวลาช้ากว่าเวลา cron ที่ฉันกำหนดไว้ 2 ชั่วโมง ดังนั้นนี่จึงสมเหตุสมผล - person Jono; 30.09.2011

เวลาบันทึกงาน Magento cron จะถูกบันทึกในรูปแบบ UTC เวลารันจริงจะขึ้นอยู่กับออฟเซ็ต TZ (เวลาเซิร์ฟเวอร์) นี่คือสคริปต์ Cron Job Monitor ที่แสดงงานตามกำหนดเวลาและเวลาเสร็จงาน นอกจากนี้ยังแจ้ง UTC เวลาเซิร์ฟเวอร์ และเวลาร้านค้าของคุณ (ร้านค้าเดียว) ทั้งสามอาจแตกต่างกัน การตรวจสอบงาน Cron

เพื่อให้มีประโยชน์ ฉันจึงตั้งค่า System Config ให้เก็บข้อผิดพลาดและข้อมูลที่บันทึกไว้เป็นเวลา 24 ชั่วโมง ด้วยวิธีนี้ คุณจะสามารถตรวจสอบงานใหญ่ๆ ที่ทำงานในช่วงเช้าตรู่ได้จริง และยืนยันว่างานเหล่านั้นกำลังทำงานอยู่จริงๆ

person Fiasco Labs    schedule 29.09.2011
comment
Catalog_product_index_price_reindex_all ความสำเร็จ 2011-09-29 08:45:05 2011-09-29 09:00:00 2011-09-29 09:00:05 2011-09-29 09:00:13 ไม่ตามเวลาบันทึกที่สังเกตได้ ซึ่งกำหนดให้ทำงานเวลา 02.00 น. ทุกเช้า ซึ่งเป็นการเช็คเอาท์เทียบกับเวลา นี่คือรายการ cron Catalog Catalog/product_indexer_price:: reindexAll 0 2 * * * โปรดทราบว่ามีการบันทึกว่าทำงานเมื่อเวลา 9:00 น. นี่คือวันที่ 1.4.1.1 ดังนั้นไม่แน่ใจว่าเกิดอะไรขึ้นกับ 1.5.1.x - person Fiasco Labs; 30.09.2011
comment
ทุกอย่างอาจเกิดขึ้นใน UTC แต่จะถูกเลื่อนไปยังโซนเวลาท้องถิ่นสำหรับรันไทม์จริง มิฉะนั้น คุณจะมีกระบวนการที่ยุ่งยากมากทำงานในช่วงเวลายุ่งของร้านค้าของคุณ ฉันขยายการตรวจสอบ cron นี้ออกไปหลังจากมีคนบอกฉันว่า Magento กำหนดเวลาและ RAN ทุกอย่างภายใน UTC เปรียบเทียบกับสิ่งที่คุณพูดได้อย่างไร? - person Fiasco Labs; 30.09.2011
comment
หลังจากดูโค้ดการกำหนดเวลาให้ละเอียดยิ่งขึ้น ฉันพบส่วนที่ใช้เขตเวลาเริ่มต้นที่กำหนดค่าไว้สำหรับการติดตั้งจริงๆ ความผิดพลาดของฉันคือการมองข้ามการเรียกไปยัง Mage::getSingleton('core/date')-›timestamp($time) - person Lee Saferite; 30.09.2011
comment
ขอบคุณสำหรับการยืนยันลี มันเป็นที่มาของความหงุดหงิดเมื่อประมาณหกเดือนที่แล้วโดยพยายามค้นหาให้แน่ชัดว่าสิ่งต่างๆ ดำเนินไปเมื่อใด (โดยปกติแล้วความทุกข์ยากในการทำให้งาน cron ถูกไล่ออก) และไม่มีเอกสารประกอบให้ถอยกลับ :^) จริงๆ แล้วคืนหนึ่งฉันนั่งดูงานใหญ่ๆ เริ่มเลิกงานตอนตี 2 ไม่ใช่เพียงเหตุของ Magento ในช่วงดึกเท่านั้น! ทุกๆ การเจาะลึกและคำอธิบายช่วยได้ - person Fiasco Labs; 30.09.2011
comment
สำหรับการอ้างอิงในอนาคต วิธีการที่ใช้ 'เวทมนตร์' คือ: Mage_Cron_Model_Schedule::trySchedule() และ 'magic' มีลักษณะดังนี้: $d = getdate(Mage::getSingleton('core/date')-›timestamp ($เวลา)); - person Lee Saferite; 30.09.2011