เครื่องมือสำหรับนักพัฒนา · ตัวสร้าง Crontab
ฟิลด์ crontab(5): POSIX ระบุอะไรและส่วนขยาย Vixie คืออะไร
· พื้นหลัง
cron พกพาสะดวก การตรวจสอบ
ไม่ใช่ทุกฟีเจอร์ของ cron ที่เป็นมาตรฐาน โพสต์นี้จะแยกสิ่งที่ข้อกำหนด POSIX crontab ต้องการจากส่วนขยาย (ขั้นตอน ชื่อ ชื่อเล่น) ที่ Vixie cron เพิ่ม และระบบ Linux ส่วนใหญ่ยอมรับ
นิพจน์ ToolAcre ที่ถูกต้องยังคงไม่ได้รับการสนับสนุนโดยตัวกำหนดเวลาอื่น
กำหนดการที่ผ่าน ToolAcre เป็นไปตามตัวแยกวิเคราะห์นี้ ไม่ใช่ทุกการใช้งาน cron การพกพาเริ่มต้นด้วยข้อความที่เรียบง่าย เส้นทางยอมรับห้าฟิลด์และไวยากรณ์โทเค็นที่กำหนดไว้ อุปกรณ์ บริการ หรือกรอบงานเป้าหมายอาจยอมรับน้อยลง มากกว่า หรือมีบางสิ่งที่แตกต่างทางโครงสร้าง
เก็บผลลัพธ์ของเบราว์เซอร์ไว้เป็นหลักฐานชิ้นเดียว: การแสดงออก คำอธิบาย คำเตือน และโซนแสดงตัวอย่าง ก่อนการใช้งาน ให้เปรียบเทียบเอกสารเป้าหมายและทำการทดสอบที่ไม่เป็นอันตราย การตรวจสอบความถูกต้องจะเป็นอันตรายเมื่อมีการเลื่อนสัญญาณสีเขียวในพื้นที่เป็นการรับประกันความเข้ากันได้สากลเท่านั้น
พื้นที่เก็บข้อมูลไม่ได้กำหนดสิ่งที่ POSIX ต้องการ
สมุดงานแยกข้อกำหนด POSIX ออกจากส่วนขยาย แต่ไม่มีข้อกำหนด POSIX ปรากฏในแหล่งเก็บข้อมูล พฤติกรรมของ ToolAcre ไม่สามารถพิสูจน์ได้ว่าข้อใดมีคุณสมบัติตามข้อบังคับมาตรฐาน ส่วนนี้จึงอธิบายไวยากรณ์ที่นำไปใช้โดยไม่ต้องกำหนดให้กับเนื้อหามาตรฐาน
ช่วงตัวเลขที่ใช้คือ 0–59 นาที, 0–23 ชั่วโมง 1–31 วันของเดือน 1–12 เดือน และ 0–7 วันธรรมดา สัญลักษณ์แทน ค่าเดี่ยว ช่วงรวม รายการลูกน้ำ ขั้นตอนของสัญลักษณ์แทน ขั้นตอนของช่วง และค่าเริ่มต้นเปล่าพร้อมขั้นตอน ล้วนถูกแยกวิเคราะห์และทดสอบ
ชื่อ ขั้นตอน วันอาทิตย์ 7 และนามแฝงถูกนำมาใช้ที่นี่ โดยไม่มีการอ้างสิทธิ์ในประวัติมาตรฐาน
ชื่อเดือน JAN ถึง DEC และชื่อวันในสัปดาห์ SUN ถึง SAT ไม่ต้องคำนึงถึงตัวพิมพ์เล็กและใหญ่ ชื่อสามารถปรากฏเพียงลำพัง ในรายการและในช่วง วันธรรมดา 7 ยอมรับเป็นวันอาทิตย์และปรับมาตรฐานเป็น 0 สิ่งเหล่านั้นเป็นคุณสมบัติที่สังเกตได้ของ `parseField` ไม่ว่าการใช้งานอื่นจะจัดประเภทอย่างไร
ตารางนามแฝงจะขยาย `@yearly`, `@annually`, `@monthly`, `@weekly`, `@daily`, `@midnight` และ `@hourly` `@reboot` จงใจปฏิเสธเนื่องจากไม่มีกำหนดการในปฏิทินที่จะแสดงตัวอย่าง คำที่ไม่รู้จักได้รับข้อผิดพลาดในการตั้งชื่อรายการที่ได้รับการสนับสนุน
การสนับสนุนการกำหนดสภาพแวดล้อมอยู่นอก parser นี้
การกำหนดสภาพแวดล้อมไม่ได้เป็นส่วนหนึ่งของไวยากรณ์นิพจน์นี้ กล่องอินพุตคาดหวังหนึ่งกำหนดการ และ `parseCron` แบ่งออกเป็นห้าส่วนหลังจากแก้ไขนามแฝงที่รองรับแล้ว ไม่สามารถทดสอบบรรทัด `KEY=value` สำหรับการขยาย การเสนอราคา หรือการย้ายผ่านเส้นทางนี้ได้
การละเว้นดังกล่าวจะป้องกันการกล่าวอ้างมาตรฐานที่เป็นเท็จ ไฟล์ crontab ที่สมบูรณ์สามารถมีโครงสร้างที่เครื่องมือนิพจน์อย่างเดียวไม่เคยเห็น ตรวจสอบสิ่งเหล่านั้นแยกจากกันกับเป้าหมาย ข้อผิดพลาดของฟิลด์ที่แม่นยำของ ToolAcre ไม่ควรนำมาใช้ใหม่เพื่อตัดสินเกี่ยวกับบรรทัดที่ไม่เกี่ยวข้องในไฟล์ขนาดใหญ่
ตรวจสอบไวยากรณ์เป้าหมายและใช้การทดสอบกำหนดเวลาที่ไม่เป็นอันตราย
การตรวจสอบเป้าหมายควรเริ่มต้นด้วยการนับสนามและผู้ปฏิบัติงาน ยืนยันว่ายอมรับชื่อ วันอาทิตย์ 7 เครื่องหมายทับ และนามแฝงที่ลงชื่อหรือไม่ จากนั้นติดตั้งการดำเนินการที่สังเกตได้ที่ไม่เป็นอันตรายในระยะเวลาอันใกล้ ลบออกหลังจากจับหลักฐานได้แล้ว และเปรียบเทียบผลลัพธ์ของเป้าหมายกับการแสดงออกที่ตั้งใจไว้
อย่าทดสอบความสามารถในการพกพาด้วยคำสั่งที่ละเอียดอ่อนหรือโดยการรอวันที่ประจำปีซึ่งพบไม่บ่อยนัก เลือกโพรบที่ปลอดภัยที่เล็กที่สุดซึ่งแยกแยะความแตกต่างระหว่างการสนับสนุนไวยากรณ์ ToolAcre สามารถช่วยสร้างกำหนดการนั้นและอธิบายได้ ในขณะที่การเรียกใช้เป้าหมายจะสร้างส่วนที่เบราว์เซอร์ไม่สามารถรู้ได้
ตัวอย่างการทำงาน: รูปแบบขั้นตอนและรายการที่ชัดเจนภายใต้ไวยากรณ์ของ ToolAcre
ทุกๆ ห้านาที ToolAcre ยอมรับ `*/5 * * * *` นอกจากนี้ยังยอมรับรายการนาทีที่ชัดเจน `0,5,10,15,20,25,30,35,40,45,50,55 * * * *` การแยกวิเคราะห์จะขยายฟิลด์นาทีทั้งสองเป็นค่าสิบสองค่าเดียวกัน ดังนั้นตัวเลือกที่รันถัดไปจะจับคู่ภายใต้อินสแตนซ์และโซนเริ่มต้นเดียวกัน
รายการที่ชัดเจนสามารถทำหน้าที่เป็นตัวเลือกสำรองได้เมื่อเป้าหมายไม่มีไวยากรณ์ขั้นตอน แต่พื้นที่เก็บข้อมูลนี้ไม่สามารถรับรองการสนับสนุนรายการของเป้าหมายนั้นได้ เปรียบเทียบทั้งสองรูปแบบใน ToolAcre เพื่อความเท่าเทียมกันทางความหมาย จากนั้นตรวจสอบเอกสารปลายทางในรูปแบบใดก็ตาม ความเท่าเทียมกันในที่นี้ไม่ใช่ข้อพิสูจน์เรื่องการพกพา
ไวยากรณ์หกฟิลด์ถูกปฏิเสธ ความหมายภายนอกไม่ได้บันทึกไว้ที่นี่
ไม่ยอมรับช่องที่หก ข้อผิดพลาดบ่งชี้ว่ารูปแบบวินาทีนำหน้าเป็นของ Quartz หรืออินพุตที่คล้ายกับ systemd แต่ parser ไม่ได้ใช้ไวยากรณ์เหล่านั้น ไม่มีฟิลด์ปีและไม่มีตัวดำเนินการ `?`, `L`, `W` หรือ `#`
นับช่องก่อนที่จะพยายามแปล หากไวยากรณ์ที่ไม่สนับสนุนมีความหมายในการกำหนดเวลา การเขียนใหม่ห้าฟิลด์ที่ชัดเจนอาจสูญเสียไป ใช้เอกสารประกอบและการทดสอบสำหรับตัวกำหนดเวลาแหล่งที่มา จากนั้นแสดงเฉพาะข้อกำหนดที่แสดงโดยไวยากรณ์เป้าหมายของ ToolAcre สิ่งอื่นใดควรยังคงเป็นความไม่เข้ากันอย่างชัดเจน
Takeaway: รู้ว่าฟีเจอร์ใดเป็นส่วนขยาย — และใช้ตัวสร้างเพื่อสร้างและตรวจสอบทั้งสองรูปแบบเมื่อการพกพามีความสำคัญ
การพกพาคือการเปรียบเทียบ ไม่ใช่ป้ายกำกับที่ฝังอยู่ในนิพจน์ ToolAcre ให้ด้านหนึ่งที่ผ่านการทดสอบอย่างดี: ห้าตำแหน่ง, ขอบเขตตัวเลข, ชื่อที่เลือก, ช่วงที่ประกอบได้/lists/steps และนามแฝงเจ็ดตัว นอกจากนี้ยังให้การปฏิเสธที่ชัดเจนสำหรับรูปแบบที่ผิดรูปแบบหรือรูปแบบต่างประเทศ
ใช้สัญญานั้นให้เหตุผลอย่างแม่นยำแล้วตรวจสอบอีกฝ่าย รายการที่ชัดเจนและขั้นตอนสามารถเท่ากันในตัวแยกวิเคราะห์นี้ ในขณะที่มีเพียงรายการเดียวเท่านั้นที่ทำงานที่อื่น การรายงานขอบเขตภาษาถิ่นสามารถทำได้มากกว่าการอ้างถึงมาตรฐานที่บทความไม่ได้มาจากแหล่งที่มาจริง