เครื่องมือสำหรับนักพัฒนา · ตัวสร้าง Crontab
เหตุใด cron จึงไม่มีฟิลด์วินาที และที่มาของนิพจน์หกฟิลด์
· พื้นหลัง
cron ภาษาถิ่น การตรวจสอบ
นิพจน์แบบหกฟิลด์ไม่ใช่นิพจน์ 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 ทำให้ขั้นตอนแรกหลีกเลี่ยงไม่ได้ และคำอธิบายจะให้การตรวจสอบด้านเป้าหมายหลังจากการสร้างใหม่
เส้นทางสร้างนิพจน์ห้าฟิลด์เท่านั้น ไม่ตรวจสอบวินาที ปี หรือตัวดำเนินการเฉพาะตัวจัดกำหนดการ และไม่ได้จัดกำหนดการงาน การละเว้นเหล่านั้นกำหนดขอบเขตที่เชื่อถือได้ซึ่งควรจะมองเห็นได้ในทุกการอภิปรายเรื่องการย้ายถิ่น