เครื่องมือสำหรับนักพัฒนา · ตัวสร้าง Crontab
ตัวอย่างนิพจน์ Cron: รายชั่วโมง ทุกคืน วันธรรมดา วันแรกของเดือน
· มันทำงานอย่างไร
cron ตัวอย่าง การกำหนดเวลา
ตารางเวลาสิบรายการครอบคลุม crontab จริงส่วนใหญ่ โพสต์นี้ให้การแสดงออกสำหรับแต่ละรายการ อธิบายสาขาต่างๆ และชี้ให้เห็นส่วนที่ผู้คนมักเข้าใจผิดอยู่เสมอ
คุณต้องมี 'แรกของเดือนที่ 06:00' และผลการค้นหาไม่ตรงกัน — ชุดของสำนวนที่ได้รับการยืนยันพร้อมเหตุผล
คำตอบที่คัดลอกไว้สำหรับ “วันแรกของเดือนที่ 06:00” จะมีประโยชน์ก็ต่อเมื่อทุกตำแหน่งสามารถพิสูจน์ได้ ตามลำดับแบบห้าฟิลด์ `0 6 1 * *` หมายถึงศูนย์นาที ชั่วโมงที่หก วันที่ของเดือนที่หนึ่ง ทุกเดือน และทุกวันธรรมดา การอ่านฟิลด์จะป้องกันไม่ให้ตัวอย่างที่น่าสนใจกลายเป็นการพึ่งพาการผลิตที่ไม่สามารถอธิบายได้
ตัวอย่างที่นี่อยู่ภายในไวยากรณ์ที่แยกวิเคราะห์และการทดสอบของ ToolAcre เป็นส่วนย่อยของกำหนดการ ไม่ใช่คำจำกัดความของงานที่สมบูรณ์ เบราว์เซอร์สามารถอธิบายและแสดงตัวเลือกนาฬิกาแขวนในอนาคตในโซนที่เลือก แต่จะไม่ทราบคำสั่ง การอนุญาต หรือโฮสต์ที่อาจใช้งานในที่สุด
ทุกนาที ทุก 5 นาที ทุกชั่วโมง — * * * * *, */5 * * * * และ 0 * * * * และเหตุใด 0 ชั้นนำจึงมีความสำคัญ
`* * * * *` เลือกค่าทุกนาทีของทุกชั่วโมงและวันที่ `*/5 * * * *` จำกัดนาทีเป็น 0, 5, 10 และต่อๆ ไปจนถึง 55 `0 * * * *` เลือกเฉพาะศูนย์นาที โดยสร้างผู้สมัครหนึ่งคนที่ด้านบนของแต่ละชั่วโมง ศูนย์นำหน้าจึงเป็นค่าความแตกต่างระหว่างตำแหน่งหกสิบนาทีกับหนึ่งตำแหน่ง
ทั้งสามรูปแบบปรากฏในค่าที่ตั้งล่วงหน้าหรือไวยากรณ์ที่ทดสอบ ขั้นตอนจะขยายจากขอบเขตล่างของฟิลด์นาที ในขณะที่ไวด์การ์ดจะขยายทุกค่าที่อนุญาตตั้งแต่ 0 ถึง 59 ใช้การแสดงตัวอย่างเพื่อตรวจสอบการทำงานอย่างเคร่งครัดหลังจากนั้น อย่าอนุมานว่าเครื่องมือได้เริ่มกระบวนการที่เกิดซ้ำเพียงเพราะสามารถระบุเวลาได้
รายวันครั้งละครั้งและวันละสองครั้ง — 30 2 * * * และ 0 6,18 * * *
ทุกวันที่ 02:30 คือ `30 2 * * *`: นาที 30 และชั่วโมง 2 โดยไม่จำกัดช่องปฏิทิน วันละสองครั้งที่ 06:00 และ 18:00 คือ `0 6,18 * * *`; เครื่องหมายจุลภาครวมค่าสองชั่วโมงในขณะที่นาทียังคงคงที่ ทั้งสองอย่างจะตรวจสอบได้ง่ายกว่าเมื่อรายการชั่วโมงมีความชัดเจน แทนที่จะทำซ้ำเป็นสองบรรทัด
โซนเวลาที่เลือกจะเปลี่ยนช่วงเวลาที่แสดงสำหรับช่องนาฬิกาแขวนเดียวกัน ToolAcre คำนวณผู้สมัครแต่ละคนเป็นเวลาท้องถิ่นในโซนนั้น และละเว้นเวลาท้องถิ่นที่ไม่มีอยู่ในระหว่างการเปลี่ยนนาฬิกาเดินหน้า ลักษณะการแสดงตัวอย่างนั้นเป็นของเครื่องมือนี้ บทความนี้ไม่ได้สรุปเป็นคำมั่นสัญญาเกี่ยวกับภูตทุกตัว
วันธรรมดาและวันหยุดสุดสัปดาห์ — 0 8 * * 1-5 และ 0 10 * * 0,6 โดยมีข้อแม้ในการนับเลขวันอาทิตย์
วันธรรมดาที่ 08:00 คือ `0 8 * * 1-5` และช่วงเช้าสุดสัปดาห์ที่ 10:00 คือ `0 10 * * 0,6` parser นี้ยอมรับ Sunday เป็น 0 หรือ 7 และปรับทั้งสองค่าให้เป็นค่าเดียวกัน นอกจากนี้ยังรองรับชื่อด้วย ดังนั้น `MON-FRI` จึงสามารถแทนที่ `1-5` ได้โดยไม่ต้องเปลี่ยนวันทำงานที่ขยายออก
หลีกเลี่ยงการตั้งวันของเดือนในเวลาเดียวกัน เว้นแต่ต้องการการรวม OR `0 8 1 * 1-5` ไม่ได้หมายถึงวันธรรมดาเฉพาะในวันแรกเท่านั้น โดยจะรวมวันแรกของแต่ละเดือนบวกทุกวันธรรมดาด้วย ตัวสร้างจะเตือนเมื่อใดก็ตามที่ฟิลด์ทั้งสองวันถูกจำกัด และวาง "หรือ" ในประโยคผลลัพธ์
รายเดือน รายไตรมาส และรายปี — 0 6 1 * *, 0 6 1 1,4,7,10 * และ 0 0 1 1 *
ทุกเดือนที่ 06:00 ในตอนแรกคือ `0 6 1 * *` รายไตรมาสในวันแรกของเดือนมกราคม เมษายน กรกฎาคม และตุลาคมคือ `0 6 1 1,4,7,10 *` งานเที่ยงคืนประจำปีในวันที่ 1 คือ `0 0 1 1 *` ซึ่งเป็นส่วนขยายที่ใช้โดยนามแฝง `@yearly` และ `@annually` ที่รองรับด้วย
ตัวอย่างเหล่านี้ใช้วันที่มีอยู่ในทุกเดือนที่เลือก ToolAcre ยอมรับชุดค่าผสมที่เป็นไปไม่ได้ว่าถูกกฎหมายทางวากยสัมพันธ์ แต่เตือนว่าเมื่อใด เช่น วันที่ 30 จับคู่กับเดือนกุมภาพันธ์เท่านั้น กุมภาพันธ์ 29 ได้รับคำเตือนปีอธิกสุรทิน ความถูกต้องของปฏิทินจึงแสดงแยกจากไวยากรณ์ของฟิลด์ แทนที่จะซ่อนไว้หลังข้อความที่ไม่ถูกต้องทั่วไปข้อความเดียว
การจัดกำหนดการวันสุดท้ายไม่สามารถแสดงได้ด้วยตัวดำเนินการห้าฟิลด์ที่ได้รับการสนับสนุน
ไวยากรณ์ที่รองรับไม่มีตัวดำเนินการวันสุดท้าย `L` ถูกปฏิเสธแทนที่จะแปล และวันที่ 31 ไม่สามารถครอบคลุมเดือนที่มีสามสิบวันหรือกุมภาพันธ์ สมุดงานเสนอการทดสอบวันที่ฝั่งคำสั่ง แต่พื้นที่เก็บข้อมูลนี้ไม่ได้ดำเนินการหรือตรวจสอบคำสั่ง ดังนั้นบทความนี้จึงไม่นำเสนอวิธีแก้ปัญหาดังกล่าวเป็นคุณลักษณะตัวสร้างที่ได้รับการสนับสนุน
ถือว่า “วันสุดท้ายของทุกเดือน” เป็นข้อกำหนดที่เกินกว่าภาษาสำนวนนี้ เลือกตัวกำหนดเวลาหรือกลยุทธ์การสั่งการที่บันทึกโดยเป้าหมายจริง และทดสอบที่นั่น ToolAcre ยังคงมีประโยชน์สำหรับห้าฟิลด์ทั่วไปเกี่ยวกับการตัดสินใจนั้น แต่ความสำเร็จในการตรวจสอบความถูกต้องไม่สามารถสร้างตัวดำเนินการที่ parser ไม่ได้ใช้
ฟิลด์วินาทีและตัวดำเนินการภายนอกถูกปฏิเสธโดยตัวแยกวิเคราะห์นี้
สำนวนแบบคลาสสิกในเส้นทางนี้ไม่มีตำแหน่งวินาทีหรือปี หกฟิลด์ถูกปฏิเสธพร้อมคำแนะนำเกี่ยวกับสไตล์ตัวกำหนดเวลาที่มุ่งเน้นวินาที โปรแกรมแยกวิเคราะห์ยังปฏิเสธ `?`, `#`, `L` และ `W` เนื่องจากตัวอ่านค่าของมันยอมรับตัวเลข รองรับชื่อตัวอักษรสามตัว ช่วง เครื่องหมายจุลภาค เครื่องหมายทับ และสัญลักษณ์ตัวแทนเท่านั้น
ข้อกำหนดนาทีย่อยจึงไม่สามารถแสดงได้ที่นี่ และนิพจน์จากตัวกำหนดเวลาอื่นไม่สามารถประกาศให้เทียบเท่าได้เพียงเพราะมันดูคล้ายกัน นับตำแหน่ง ตรวจสอบการสนับสนุนของผู้ปฏิบัติงาน และสร้างชุดที่ต้องการใหม่ด้วยไวยากรณ์เป้าหมาย ความหมายที่ถูกละเว้นควรยังคงเป็นช่องว่างที่ชัดเจน ไม่ใช่การประมาณโดยไม่ได้ตั้งใจ
ประเด็นสำคัญ: สร้างจากทั้ง 10 อย่างนี้ และใช้โปรแกรมสร้าง Crontab เพื่อปรับเปลี่ยนและอ่านผลลัพธ์
กำหนดการทั่วไปจะปลอดภัยยิ่งขึ้นเมื่อแต่ละโทเค็นมีเหตุผล: ปักหมุดขอบเขตเป็นศูนย์ ทางเลือกชื่อลูกน้ำ ช่วงที่มีปลายทั้งสองข้าง และดาวเปิดช่อง ค่าที่ตั้งล่วงหน้ามีจุดเริ่มต้นหลายจุด รวมถึงแบบฟอร์มทุกนาที รายไตรมาส รายชั่วโมง รายวัน เวลาทำการในวันธรรมดา วันอาทิตย์ รายเดือน และรายปี
ปรับค่าที่ตั้งไว้ล่วงหน้าที่ใกล้ที่สุด อ่านประโยคที่สร้างขึ้น และสแกนห้าครั้งถัดไปในโซนที่ต้องการของเครื่อง ลำดับนั้นจะตรวจสอบเจตนาของการแสดงออกในขณะที่ยังคงใช้งานภายนอกเบราว์เซอร์ ตัวอย่างที่ดีไม่ใช่แค่พร้อมสำหรับการทำสำเนาเท่านั้น มันมีขนาดเล็กพอที่ผู้ตรวจสอบอีกคนจะสามารถสร้างใหม่ได้ว่าทำไมทุกสาขาถึงอยู่ที่นั่น