- เหตุใดการทำงานผิดปกติใน Cron จึงเกิดขึ้นได้
นี่ไม่ใช่ปัญหา cron
Cron เป็นตัวจัดกำหนดการที่เรียบง่ายมาก ซึ่งเพียงแค่เริ่มชุดงานใหม่ตามเวลา/ช่วงเวลาที่คุณระบุ
ไม่ว่าด้วยเหตุผลใดก็ตาม เมื่องานแบทช์ของคุณไม่สามารถดำเนินการให้เสร็จทันเวลาก่อนที่การวนซ้ำครั้งต่อไปจะเริ่มต้นขึ้น คุณจะจบลงด้วยสองกระบวนการที่เกิดขึ้นพร้อมกัน Cron ไม่ได้ทำสิ่งใดเพื่อป้องกันสิ่งนั้น
ขึ้นอยู่กับสมมติฐานและโค้ดของคุณว่าจะทำให้เกิดปัญหาในทันทีหรือไม่
อาจเป็นได้ว่าการวนซ้ำครั้งที่สองทันทีทำให้เกิดการหยุดชะงักและหยุดชะงักอย่างไม่มีกำหนด 10 วินาทีต่อมา การวนซ้ำครั้งที่สามจะหยุดการหยุดชะงักที่เกิดจากการวนซ้ำครั้งที่สอง และ 10 วินาทีต่อมา การวนซ้ำครั้งต่อไปก็หยุดทันทีเช่นกัน ฯลฯ ที่สามารถสโนว์บอลได้อย่างรวดเร็ว
หรืออาจเป็นกระบวนการที่ช้ากว่ามาก โดยสำหรับแต่ละแบทช์ รันไทม์จะค่อยๆ เพิ่มขึ้น และแทนที่จะหยุดแบทช์ที่รันมากขึ้นเรื่อยๆ กลับจบลงที่การทำงานพร้อมๆ กันสิ่งนั้น (ในที่สุด) จะเพิ่มโหลดมากขึ้น เริ่มช่วงชิงทรัพยากร และผลลัพธ์ในชุดงานที่ต้องใช้เวลานานขึ้นกว่าจะเสร็จสมบูรณ์ และชุดงานพร้อมๆ กัน/พร้อมกันมากขึ้น และการขาดแคลนทรัพยากร
- เมื่อฉันสร้างระบบคิวสำหรับ เช่น codigniter แทนกระบวนการ Cron มันแตกต่างจาก cron อย่างไร
ดังที่คุณพบที่นี่ cron ไม่ใช่ระบบการรอคิว มันเป็นเพียงตัวกำหนดตารางเวลาที่ง่ายมาก
หากคุณต้องการเพิ่มการควบคุมงานที่ซับซ้อน คุณต้องสร้างมันขึ้นมา ดูตัวอย่างคำตอบนี้ ที่นี่ เกี่ยวกับวิธีป้องกันไม่ให้ชุด cron หลายชุดทำงานพร้อมกันในข้อกำหนดชุดงานของคุณ
มิฉะนั้นการรันสิ่งที่สูงกว่า cron ธรรมดาอาจเป็นวิธีแก้ปัญหา
- ฉันจะปราศจากปัญหาดังกล่าวเมื่อฉันทำให้ PHP เป็นระบบที่ทำงานอยู่เบื้องหลังหรือไม่?
หากสาเหตุหลักคือข้อเท็จจริงที่ว่าโค้ดของคุณพังเมื่อใดก็ตามที่แบทช์สองชุดทำงานพร้อมกัน มาตรการที่ออกแบบมาเพื่อทำให้โค้ดของคุณทำงานเร็วขึ้นจะไม่กำจัดข้อบกพร่องนั้นหรือป้องกันไม่ให้เกิดขึ้นอีก