ไทย

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

เหตุใด cron จึงไม่มีฟิลด์วินาที และที่มาของนิพจน์หกฟิลด์

· พื้นหลัง

cron ภาษาถิ่น การตรวจสอบ

ห้าช่อง cron ที่ยอมรับ ข้างช่องวินาทีที่หกที่ถูกปฏิเสธ
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

นิพจน์แบบหกฟิลด์ไม่ใช่นิพจน์ cron แม้ว่าจะมีลักษณะเหมือนกันก็ตาม โพสต์นี้อธิบายว่าทำไม Unix cron จึงหยุดทำงานเป็นนาที และวิธีที่ Quartz, Spring และ cloud schedulers ขยายไวยากรณ์อย่างไร

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

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

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

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

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

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

รายละเอียดควอตซ์ที่นอกเหนือไปจากรูปแบบวินาทีนำจะไม่ถูกนำมาใช้ที่นี่

ข้อความแสดงข้อผิดพลาดแหล่งที่มาตั้งชื่อ Quartz เป็นตัวอย่างของสไตล์วินาทีแรก แต่ parser ไม่ได้ใช้ตัวดำเนินการ Quartz หรือตำแหน่งที่เป็นทางเลือก อักขระเช่น `?`, `L`, `W` และ `#` ล้มเหลวในการอ่านค่าธรรมดา สิ่งเหล่านี้ไม่ได้แปลหรืออธิบายเป็นไวยากรณ์ที่รองรับ

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

ไวยากรณ์ตัวกำหนดเวลาของ Spring และ Cloud อยู่นอกชุดหลักฐาน

ชื่อกรอบงานและตัวกำหนดเวลาคลาวด์ในสมุดงานจำเป็นต้องมีเอกสารปัจจุบันของตนเอง พื้นที่เก็บข้อมูลไม่มีสคีมากำหนดการ Spring, EventBridge, Kubernetes หรือ GitHub Actions ไม่ควรสรุปจำนวนฟิลด์ นามแฝง และนโยบายเขตเวลาจากหน่วยความจำที่นี่

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

ตัวอย่างการทำงาน: สร้างกำหนดการวันธรรมดารายไตรมาสที่สามารถเป็นตัวแทนได้ใหม่

สมมติว่าข้อกำหนดของแหล่งที่มาคือทุกๆ สิบห้านาทีในระหว่างชั่วโมง 9 ถึง 17 ในวันธรรมดา และไม่มีโอเปอเรเตอร์ต่างประเทศที่มีความหมายเพิ่มเติม ใน ToolAcre รูปแบบที่เป็นตัวแทนได้คือ `*/15 9-17 * * MON-FRI` parser จะขยายชั่วโมงรายไตรมาส รวมชั่วโมงและตั้งชื่อวันทำงาน

คำอธิบายและดูตัวอย่างจะแสดงการตีความเป้าหมาย รวมถึงผู้สมัครรายวันขั้นสุดท้ายที่ 17:45 เปรียบเทียบกับพฤติกรรมที่แท้จริงของตัวกำหนดตารางเวลาต้นทางก่อนที่จะเรียกการแปลที่เทียบเท่า แบบฟอร์มห้าฟิลด์นั้นถูกต้องสำหรับข้อกำหนดทางวาจาที่กำหนดไว้ระหว่างการแปลเท่านั้น

ลูปคำสั่งย่อยจะไม่ถูกสร้างหรือแนะนำ

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

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

โอเปอเรเตอร์สิ้นเดือนในต่างประเทศยังไม่มีการแปล

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

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

Takeaway: นับฟิลด์ก่อนที่คุณจะวาง — และใช้ตัวสร้างเพื่อสร้างเวอร์ชันห้าฟิลด์ที่ crontab ยอมรับ

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

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