วิธีใช้งาน
- พิมพ์หรือวางนิพจน์ cron หรือเลือกตารางเวลาที่ใช้บ่อย
- อ่านคำอธิบายเป็นภาษาทั่วไป หากฟิลด์ไม่ถูกต้อง ระบบจะแจ้งชื่อฟิลด์พร้อมเหตุผล
- ตรวจสอบเวลาทำงาน 10 ครั้งถัดไป ซึ่งแสดงตามเขตเวลาท้องถิ่น สลับเป็น UTC หากเซิร์ฟเวอร์ของคุณใช้ UTC
- คัดลอกเวลาทำงานเพื่อแชร์ หรือปรับนิพจน์จนได้ตารางเวลาที่ต้องการ
วิธีการทำงาน
นิพจน์ cron มาตรฐานที่ใช้กับ crontab บน Linux (Vixie cron และ cronie) รวมถึงตัวจัดตารางเวลาของ CI และบริการโฮสติ้งหลายแห่ง มี 5 ฟิลด์คั่นด้วยช่องว่าง ได้แก่ นาที (0–59), ชั่วโมง (0–23), วันที่ในเดือน (1–31), เดือน (1–12 หรือ JAN–DEC) และวันในสัปดาห์ (0–7 หรือ SUN–SAT โดยทั้ง 0 และ 7 หมายถึงวันอาทิตย์) แต่ละฟิลด์รองรับ * เพื่อหมายถึงทุกค่า, ค่าเดียว, ช่วง เช่น 1-5, รายการ เช่น 1,15,30 และช่วงระยะ เช่น */15 (ทุก ๆ 15 ค่า) หรือ 9-17/2 (ทุก 2 ชั่วโมงตั้งแต่ 9 ถึง 17) ชื่อไม่แยกตัวพิมพ์เล็กและใหญ่ คำย่อ @yearly (หรือ @annually), @monthly, @weekly, @daily (หรือ @midnight) และ @hourly ใช้แทน 0 0 1 1 *, 0 0 1 * *, 0 0 * * 0, 0 0 * * * และ 0 * * * * ตามลำดับ
ฟิลด์วันที่ในเดือนและวันในสัปดาห์มีกฎที่ทำให้หลายคนเข้าใจผิด หากฟิลด์ใดฟิลด์หนึ่งเริ่มด้วย * วันนั้นต้องตรงกับทั้งสองฟิลด์ หากทั้งสองฟิลด์กำหนดค่าไว้ วันนั้นจะตรงเมื่อเข้าเงื่อนไขของฟิลด์ใดฟิลด์หนึ่ง เช่น 0 0 13 * 5 จะทำงานในวันที่ 13 ของทุกเดือนและทุกวันศุกร์ ไม่ใช่เฉพาะวันศุกร์ที่ 13 เนื่องจากพิจารณาว่าฟิลด์เริ่มต้นด้วย * หรือไม่ ช่วงระยะอย่าง */2 จึงถือว่าไม่ได้จำกัดค่าเช่นกัน พฤติกรรมนี้ตรงกับ Vixie cron และ cronie แต่ตัวจัดตารางเวลาบางตัวอาจทำงานต่างออกไป
เวลาทำงานครั้งถัดไปคำนวณตามเขตเวลาของเบราว์เซอร์ หรือ UTC ซึ่งเป็นเขตเวลาที่เซิร์ฟเวอร์และตัวจัดตารางเวลาบนคลาวด์ส่วนใหญ่ใช้ ตัว cron เองจะใช้เขตเวลาของเครื่องที่ทำงานอยู่ ในช่วงเปลี่ยนเวลาออมแสง cron daemon จริงอาจทำงานต่างกัน เครื่องมือนี้จะไม่นับเวลาท้องถิ่นที่ไม่มีอยู่เมื่อปรับนาฬิกาไปข้างหน้า และจะแสดงชั่วโมงที่เกิดซ้ำเพียงครั้งเดียว ไม่รองรับไวยากรณ์เพิ่มเติม ได้แก่ นิพจน์ Quartz แบบ 6 หรือ 7 ฟิลด์ที่มีวินาทีหรือปี และอักขระพิเศษ ?, L, W และ #
ตัวอย่าง
ตรวจสอบสถานะระบบในเวลาทำการ
*/15 9-17 * * 1-5 หมายถึงทำงานทุก 15 นาที ระหว่าง 09:00 ถึง 17:59 ตั้งแต่วันจันทร์ถึงวันศุกร์ โดยรอบสุดท้ายของแต่ละวันคือ 17:45
สำรองข้อมูลทุกคืน
30 2 * * * ทำงานทุกวันที่ 02:30 หากเซิร์ฟเวอร์ใช้ UTC และคุณอยู่ในนิวยอร์ก รายการรอบถัดไปในโหมด UTC จะแสดงเวลาที่เซิร์ฟเวอร์ใช้จริง
กับดักของฟิลด์วัน
0 9 1 * 1 ดูเหมือนจะหมายถึง “9:00 ของวันแรกของเดือน หากวันนั้นเป็นวันจันทร์” แต่จริง ๆ แล้วจะทำงานเวลา 09:00 ในวันที่ 1 ของทุกเดือน และทุกวันจันทร์ หากต้องการให้ทำงานเฉพาะวันจันทร์แรกของเดือน ให้ตั้งเวลาเป็น 0 9 1-7 * * แล้วตรวจสอบวันในสัปดาห์ภายในสคริปต์
คำถามที่พบบ่อย
*/5 ใน cron หมายถึงอะไร?
หมายถึงทุก ๆ ค่าลำดับที่ 5 ของฟิลด์ โดยเริ่มจากค่าต่ำสุด ในฟิลด์นาที */5 จะทำงานที่นาที 0, 5, 10 … 55 ส่วนในฟิลด์ชั่วโมง */5 จะทำงานที่ชั่วโมง 0, 5, 10, 15 และ 20 ดังนั้นช่วงจาก 20:00 ถึงเที่ยงคืนจึงห่างกัน 4 ชั่วโมง ไม่ใช่ 5 ชั่วโมง
ทำไมงานของฉันจึงทำงานในวันมากกว่าที่คาดไว้?
เมื่อกำหนดค่าไว้ทั้งฟิลด์วันที่ในเดือนและวันในสัปดาห์ cron จะทำงานในวันที่ตรงกับเงื่อนไขของฟิลด์ใดฟิลด์หนึ่ง เช่น 0 0 15 * 1 จะทำงานในวันที่ 15 และทุกวันจันทร์ หากต้องการให้ตรงเฉพาะอีกฟิลด์หนึ่ง ให้ตั้งค่าอีกฟิลด์เป็น *
cron ใช้เขตเวลาใด?
cron จะใช้เขตเวลาของระบบบนเซิร์ฟเวอร์ที่รัน cron daemon เว้นแต่ crontab จะกำหนด CRON_TZ หรือ TZ (รองรับโดย cronie) ตัวจัดตารางเวลาบนคลาวด์มักใช้ UTC เป็นค่าเริ่มต้น ใช้สวิตช์ UTC เพื่อดูเวลาที่เซิร์ฟเวอร์ซึ่งใช้ UTC จะทำงาน
ใช้ฟิลด์วินาทีหรือปีได้ไหม?
ไม่ได้ใน cron มาตรฐาน ซึ่งมีความละเอียดระดับ 1 นาทีและใช้ 5 ฟิลด์ รูปแบบ 6 หรือ 7 ฟิลด์ที่มีวินาทีและปีเป็นรูปแบบของ Quartz, Spring และไลบรารีลักษณะเดียวกัน ซึ่งเครื่องมือนี้ไม่รองรับ
วันอาทิตย์คือ 0 หรือ 7?
ได้ทั้งคู่ ในฟิลด์วันในสัปดาห์ 0 และ 7 หมายถึงวันอาทิตย์, 1 คือวันจันทร์ และ 6 คือวันเสาร์ นอกจากนี้ยังเขียนชื่อย่อสามตัวอักษรตั้งแต่ SUN ถึง SAT ได้ด้วย
ความเป็นส่วนตัว
ระบบจะแปลความหมายนิพจน์และคำนวณเวลาทำงานในเบราว์เซอร์ของคุณ ข้อมูลที่ป้อนไม่ถูกอัปโหลด จัดเก็บ หรือนำไปรวมในข้อมูลวิเคราะห์