ไทย

เครื่องมือสำหรับนักพัฒนา · ตัวสร้าง Crontab

งาน cron ที่ทับซ้อนกัน: เหตุใดงานที่ยาวนานจึงต้องมีการรวมตัวกัน และจะเพิ่มได้อย่างไร

· เหตุใดจึงสำคัญ

cron การทำงานพร้อมกัน การดำเนินการ

แถบงานที่ทับซ้อนกันสองแถบใต้เครื่องหมายนาฬิการายชั่วโมง
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

Cron เริ่มงานตามกำหนดเวลาไม่ว่าการรันครั้งก่อนจะเสร็จสิ้นหรือไม่ก็ตาม โพสต์นี้อธิบายสาเหตุที่ทำให้เกิดความเสียหายและโหลดเพิ่มขึ้นอย่างรวดเร็ว และแสดงสำนวนฝูงที่ทำให้การรันเป็นแบบเอกสิทธิ์เฉพาะบุคคล

การนำเข้าสองครั้งที่เขียนตารางเดียวกัน — งานรายชั่วโมงช้ากว่าหนึ่งชั่วโมงและ cron ยังคงเริ่มสำเนาใหม่

นิพจน์รายชั่วโมงสามารถระบุผู้สมัครใหม่ได้ในขณะที่งานที่เกี่ยวข้องกับผู้สมัครรุ่นก่อนหน้ายังคงทำงานอยู่ ไม่มีสิ่งใดใน `0 * * * *` บันทึกระยะเวลา ข้อมูลประจำตัวของกระบวนการ หรือสถานะความสมบูรณ์ ToolAcre ขยายศูนย์นาทีทุกๆ ชั่วโมงและสามารถแสดงรายการเวลาในอนาคตได้ แต่ไม่เคยสังเกตการดำเนินการระหว่างเวลาเหล่านั้น

นั่นหมายความว่าความถี่และความพิเศษจะต้องได้รับการตรวจสอบแยกกัน หากงานสามารถอยู่ได้นานกว่าช่วงเวลา ให้ระบุปริมาณระยะเวลาบนระบบเป้าหมายก่อน จากนั้นเลือกการควบคุมการทำงานพร้อมกันที่รองรับ การแก้ไขกำหนดการที่ถูกต้องไม่สามารถเพิ่มความรู้เกี่ยวกับกระบวนการที่มีอยู่หรือป้องกันการเรียกใช้ครั้งที่สองได้ด้วยตัวเอง

นิพจน์ไม่มีสถานะงานที่กำลังรันอยู่

parser ไม่มีสถานะระหว่างการโทร โดยจะแปลงข้อความเป็นอาร์เรย์ค่าที่เรียงลำดับและคำเตือน ในขณะที่ `nextRuns` ค้นหาวันที่โดยไม่มีตารางกระบวนการ UI คำนวณใหม่จากนิพจน์ปัจจุบัน และไม่รักษาวงจรการใช้งาน แบบจำลองจะถามว่าเมื่อใด โดยไม่เคยถามว่าการกระทำก่อนหน้านี้ยังคงทำงานอยู่หรือไม่

นี่คือหลักฐานที่ชัดเจนเบื้องหลังชื่อบทความ ไม่จำเป็นต้องมีการอ้างสิทธิ์เกี่ยวกับวิธีการแยกหรือคิวของ cron daemon ทุกตัว ภาษานิพจน์นั้นขาดฟิลด์ที่ทับซ้อนกัน และเครื่องกำเนิดไฟฟ้าขาดตัวตรวจสอบรันไทม์ การรับประกันความพิเศษใดๆ จะต้องมาจากเลเยอร์ที่แยกจากกันซึ่งมีการทดสอบพฤติกรรมโดยอิสระ

อาการทับซ้อนกันที่เป็นไปได้ขึ้นอยู่กับคำสั่งและไม่ได้คาดการณ์โดยตัวสร้าง

การทับซ้อนสามารถสัมพันธ์กับงานที่ซ้ำกัน ล็อกการโต้แย้งหรือโหลด แต่ผลลัพธ์เหล่านั้นขึ้นอยู่กับสิ่งที่คำสั่งทำ การตรวจสอบ idempotent แบบอ่านอย่างเดียวและการนำเข้าแบบมีสถานะมีความเสี่ยงที่แตกต่างกันแม้จะอยู่ภายใต้กำหนดการรายชั่วโมงเดียวกันก็ตาม ToolAcre ไม่มีตัวแยกวิเคราะห์คำสั่ง การเชื่อมต่อฐานข้อมูล หรือโมเดลทรัพยากรที่จะคาดการณ์

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

ไวยากรณ์และพฤติกรรมฝูงอยู่นอกพื้นที่เก็บข้อมูลนี้

สมุดงานกำหนด `flock -n` ซึ่งเป็นเส้นทางการล็อกและลักษณะการทำงานออก ไม่มีการใช้งานหรือการทดสอบฝูงปรากฏในพื้นที่เก็บข้อมูลนี้ ดังนั้นโมดูลนี้จึงไม่ตรวจสอบความถูกต้องของไวยากรณ์นั้น ความพร้อมใช้งานของแพลตฟอร์ม สิทธิ์ระบบไฟล์ และอายุการใช้งานการล็อค ทั้งหมดนี้อยู่นอกโค้ดกำหนดการของเบราว์เซอร์

หากฝูงสัตว์เหมาะสมกับเป้าหมาย ให้ใช้เอกสารประกอบที่ติดตั้งไว้และทดสอบสถานการณ์การโต้แย้งที่ไม่เป็นอันตรายที่นั่น อย่าสรุปความสำเร็จเนื่องจากฟิลด์กำหนดเวลาที่นำหน้าผ่าน ToolAcre นิพจน์ที่ถูกต้องสามารถนำหน้าคำสั่งล็อคที่ไม่ถูกต้อง เช่นเดียวกับการล็อคที่ถูกต้องสามารถป้องกันตารางเวลาที่เขียนสำหรับภาษาถิ่นอื่นได้

ขอบเขตการทำงาน: ตรวจสอบเวลารายชั่วโมงโดยไม่ต้องอ้างสิทธิ์ในการล็อค

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

นำความคาดหวังรายชั่วโมงนั้นไปใช้กับการทดสอบการทำงานพร้อมกันของฝั่งเป้าหมาย เริ่มอินสแตนซ์ที่ทำงานระยะยาวที่ไม่เป็นอันตราย เข้าถึงตัวเลือกถัดไปและสังเกตการควบคุมที่เลือก เก็บผลลัพธ์ไว้เป็นหลักฐานการดำเนินการแยกต่างหากจากการทบทวนนิพจน์ วิธีนี้จะรักษาการวินิจฉัยที่ชัดเจนหากเวลาหรือการล็อคมีการเปลี่ยนแปลงในภายหลัง

กลไกการผูกขาดทางเลือกอื่นจำเป็นต้องมีหลักฐานเฉพาะเป้าหมาย

การล็อกสคริปต์ภายใน นโยบายหัวหน้างาน และพฤติกรรมของผู้จัดการบริการทั้งหมดอาจให้ความพิเศษเฉพาะตัว แต่ไม่สามารถจัดอันดับความหมายของสคริปต์จากแหล่งที่มานี้ได้ ToolAcre ยังไม่ทราบด้วยว่าการพลาดการรันหนึ่งครั้งนั้นยอมรับได้หรือไม่ งานควรเข้าคิวหรือไม่ หรือความพยายามครั้งที่สองควรออกหรือไม่

กำหนดผลลัพธ์เหล่านั้นก่อนที่จะเลือกกลไก “ไม่ทับซ้อนกัน” เป็นเพียงนโยบายเดียวเท่านั้น การรวมตัวกัน การเข้าคิว และการขนานกับสถานะที่แบ่งพาร์ติชันเป็นอย่างอื่น ตัวสร้างสามารถระบุจังหวะของผู้สมัครที่ใช้ในการอภิปรายนโยบาย ในขณะที่ตัวเลือกการใช้งานยังคงมีพื้นฐานอยู่ในรันไทม์จริง

การล็อกแบบกระจายยังคงอยู่นอกทั้งการแยกวิเคราะห์กำหนดการและการแสดงตัวอย่าง

การล็อคที่ใช้ร่วมกันระหว่างโฮสต์ทำให้เกิดการประสานงานนอกเหนือจากการคำนวณปฏิทินในเครื่อง ไม่มีตัวตนของโฮสต์ ร้านค้าเครือข่าย หรือสัญญาเช่าปรากฏใน parser บทความนี้จึงหลีกเลี่ยงการแนะนำว่าไฟล์ในเครื่องหรือการแสดงตัวอย่างเบราว์เซอร์ช่วยแก้ปัญหาการทำงานพร้อมกันแบบกระจาย

สำหรับงานที่มีหลายโฮสต์ ให้ใช้การออกแบบการประสานงานซึ่งมีการจัดทำเอกสารและทดสอบโหมดความล้มเหลว ความเป็นเจ้าของ และพฤติกรรมการกู้คืน เก็บกำหนดการห้าฟิลด์เป็นอินพุตเดียวในระบบนั้น นิพจน์สามารถพกพาได้อย่างสมบูรณ์แบบ ในขณะที่เลเยอร์พิเศษเฉพาะนั้นมีความเฉพาะเจาะจงต่อสภาพแวดล้อมอย่างลึกซึ้ง

Takeaway: กำหนดการและความพิเศษเฉพาะตัวเป็นปัญหาที่แยกจากกัน - เครื่องกำเนิดไฟฟ้าจัดการอันแรก ฝูงจัดการอันที่สอง

การกำหนดเวลาคำตอบเมื่อความพยายามอีกครั้งมีสิทธิ์ ความพิเศษเฉพาะคำตอบว่าจะเริ่มได้หรือไม่ ToolAcre ใช้งานเฉพาะแบบแรกผ่านการขยายฟิลด์และการดูตัวอย่างนาฬิกาแขวน การไม่มีสถานะกระบวนการถือเป็นขอบเขตทางสถาปัตยกรรม ไม่ใช่ค่าเริ่มต้นที่ซ่อนอยู่

สร้างและตรวจสอบจังหวะ วัดระยะเวลาการดำเนินการ จากนั้นทดสอบนโยบายการทำงานพร้อมกันที่สนับสนุนเป้าหมาย การรายงานสิ่งเหล่านั้นเป็นการควบคุมแยกกันทำให้ทั้งสองอย่างสามารถตรวจสอบได้ ตัวสร้างไม่ได้กำหนดเวลางาน และไม่ควรอธิบายนิพจน์ที่คัดลอกไว้เพื่อป้องกันการดำเนินการที่ทับซ้อนกัน