ตัวแปล Cron Expression คืออะไร?
Cron เป็นไวยากรณ์การกำหนดเวลามาตรฐานที่ใช้ในงาน cron ของ Unix/Linux, ไปป์ไลน์ CI/CD, Kubernetes CronJobs และตัวกำหนดเวลาอีกนับไม่ถ้วน นิพจน์ cron บรรจุตารางงานซ้ำทั้งหมดลงใน 5 ฟิลด์ขนาดกะทัดรัด ซึ่งมีประสิทธิภาพแต่ขึ้นชื่อว่ายากต่อการเข้าใจในทันที — "0 */4 * * 1-5" หมายถึงทุก 4 ชั่วโมงในวันทำงาน หรือมีความหมายอื่น?
ตัวแปลนี้จะแยกนิพจน์ cron ฟิลด์ต่อฟิลด์และแปลเป็นประโยคภาษาที่เข้าใจง่าย เพื่อให้คุณตรวจสอบว่าตารางถูกต้องก่อนนำไปใช้งาน หรือเข้าใจตารางที่คนอื่นเขียนได้อย่างรวดเร็วโดยไม่ต้องเปิดตารางอ้างอิงไวยากรณ์ cron
เมื่อไหร่ควรใช้เครื่องคำนวณนี้
- เมื่อคุณตรวจสอบตารางเวลา cron ก่อนนำงานที่ตั้งเวลาไว้หรือไปป์ไลน์ CI/CD ไปใช้งานจริง
- เมื่อคุณดีบักว่าทำไมงานที่ตั้งเวลาไว้ถึงรัน (หรือไม่รัน) ในเวลาที่ไม่คาดคิด
- เมื่อคุณตรวจสอบ Kubernetes CronJob หรือตารางเวลา GitHub Actions ที่เขียนโดยเพื่อนร่วมทีม
- เมื่อคุณเรียนรู้ไวยากรณ์ cron สำหรับหลักสูตรการบริหารระบบหรือ DevOps
- เมื่อคุณตรวจสอบรายการ crontab ที่มีอยู่ระหว่างการย้ายเซิร์ฟเวอร์
- เมื่อคุณออกแบบรูปแบบการตั้งเวลาที่ซับซ้อนซึ่งผสมผสานข้อจำกัดด้านเวลาหลายประการ
ขั้นตอน:
- วางหรือพิมพ์นิพจน์ cron แบบ 5 ฟิลด์ลงในช่องป้อนข้อมูล
- ดูแต่ละฟิลด์ที่แยกออกมาพร้อมความหมาย
- อ่านคำแปลตารางเวลาทั้งหมดเป็นภาษาที่เข้าใจง่าย
- ลองใช้ปุ่มรูปแบบสำเร็จรูปสำหรับตารางเวลาที่ใช้บ่อย เช่น "ทุกชั่วโมง" หรือ "วันธรรมดา 9 โมงเช้า"
สูตร
┌───────────── นาที (0-59)
│ ┌───────────── ชั่วโมง (0-23)
│ │ ┌───────────── วันของเดือน (1-31)
│ │ │ ┌───────────── เดือน (1-12)
│ │ │ │ ┌───────────── วันของสัปดาห์ (0-6, อาทิตย์=0)
│ │ │ │ │
* * * * *
กรณีใช้งาน
- ตรวจสอบตารางเวลา cron ก่อนนำงานที่ตั้งเวลาไว้หรือไปป์ไลน์ CI/CD ไปใช้งานจริง
- ทำความเข้าใจ Kubernetes CronJob หรือฟังก์ชัน serverless ที่ตั้งเวลาไว้ซึ่งเขียนโดยเพื่อนร่วมทีม
- แก้ไขปัญหาว่าทำไมงานที่ตั้งเวลาไว้ถึงรัน (หรือไม่รัน) ในเวลาที่ไม่คาดคิด
- เรียนรู้ไวยากรณ์ cron สำหรับหลักสูตร sysadmin หรือ DevOps
- ตรวจสอบรายการ crontab ที่มีอยู่ระหว่างการย้ายเซิร์ฟเวอร์
ประโยชน์หลัก
- แปลไวยากรณ์ cron ที่เข้าใจยากเป็นภาษาที่เข้าใจง่ายได้ทันที
- แยกแต่ละฟิลด์จากทั้งหมด 5 ฟิลด์ออกมาเพื่อความชัดเจน
- รูปแบบสำเร็จรูปคลิกเดียวสำหรับรูปแบบการตั้งเวลาที่พบบ่อยที่สุด
- ไม่ต้องสมัครสมาชิก ทำงานทั้งหมดในเบราว์เซอร์ของคุณ
เคล็ดลับ
- หากไม่แน่ใจ ให้ทดสอบด้วยเวลาที่ใกล้ในอนาคตก่อนเพื่อยืนยันว่าตารางเวลาทำงานตามที่คาดไว้
- ใช้ช่วง (1-5) แทนการระบุทุกค่าด้วยเครื่องหมายจุลภาคเมื่อทำได้ เพื่อให้อ่านง่ายขึ้น
- ตรวจสอบการตั้งค่าเขตเวลาของเซิร์ฟเวอร์หรือตัวตั้งเวลาของคุณอีกครั้ง — นี่คือสาเหตุที่พบบ่อยที่สุดของบั๊ก "เวลาไม่ถูกต้อง" ใน cron
- สำหรับตารางเวลาที่ซับซ้อนกว่าตารางรายวัน/รายสัปดาห์ธรรมดา ให้เขียนคำอธิบายเป็นภาษาที่เข้าใจง่ายและเทียบกับความตั้งใจของคุณก่อนนำไปใช้งานจริง
ข้อผิดพลาดที่พบบ่อย
- ลืมว่าวันของเดือนและวันของสัปดาห์ถูกรวมกันด้วย OR ไม่ใช่ AND
- สับสนระหว่างวันของสัปดาห์ที่เริ่มนับจาก 0 (0=อาทิตย์) กับข้อกำหนดที่เริ่มนับจาก 1 ของระบบอื่น
- สันนิษฐานว่า */7 ในฟิลด์วันของเดือนหมายถึง "ทุก 7 วัน" — จริงๆ แล้วหมายถึงวันที่ 1, 8, 15, 22, 29 โดยเริ่มนับใหม่ทุกเดือน
- ลืมว่าการใช้งาน cron ส่วนใหญ่รันตามเขตเวลาท้องถิ่นของเซิร์ฟเวอร์ ไม่ใช่ UTC หรือเขตเวลาของผู้ใช้
คำศัพท์สำคัญ
- Cron: ตัวตั้งเวลางานตามเวลาที่ใช้ในระบบปฏิบัติการแบบ Unix
- Crontab: ไฟล์หรือคำสั่งที่ใช้กำหนดรายการงาน cron
- ค่าขั้น (Step value): ไวยากรณ์ "/N" หมายถึง "ทุก N หน่วย" เริ่มจากค่าต่ำสุดของฟิลด์
- CronJob: ทรัพยากรของ Kubernetes สำหรับรันงานตามตารางเวลา cron
แนวคิดที่เกี่ยวข้อง
- เครื่องคิดเลขผลต่างเวลา: คำนวณระยะเวลาทั้งสองวันที่และเวลา
- เครื่องคิดเลขวันนับถอยหลัง: นับวันจนถึงวันที่กำหนด
- ตัวแปลงเวลาระบบ Unix: แปลงระหว่างเวลา Unix timestamp และวันที่
- เครื่องคิดเลขอาณาเขตเวลา: ค้นหาชั่วโมงทำงานที่ทับซ้อนระหว่างเขตเวลา
- ตัวจัดรูปแบบ JSON: จัดรูปแบบและตรวจสอบข้อมูล JSON
ตัวอย่าง
นิพจน์ "0 9 * * 1-5" แยกได้เป็น: นาที=0, ชั่วโมง=9, ทุกวันของเดือน, ทุกเดือน, จันทร์ถึงศุกร์ — หมายความว่า "เวลา 09:00 น. ทุกวันจันทร์ถึงศุกร์"
การตีความผลลัพธ์
ตัวแยกวิเคราะห์จะแยกนิพจน์ cron 5 ฟิลด์ออกเป็นส่วนประกอบแต่ละส่วนและแปลเป็นภาษาที่เข้าใจง่าย ห้าฟิลด์คือ: นาที (0-59), ชั่วโมง (0-23), วันของเดือน (1-31), เดือน (1-12) และวันของสัปดาห์ (0-6 โดย 0 คือวันอาทิตย์) งานจะรันเมื่อทั้งห้าฟิลด์ตรงกับเวลาปัจจุบัน — นี่คือตรรกะ AND ระหว่างฟิลด์
สังเกตปฏิสัมพันธ์ระหว่างวันของเดือนกับวันของสัปดาห์ ซึ่งใช้ตรรกะ OR (ไม่ใช่ AND) งานที่ตั้งเวลาด้วยวันที่ 15 และวันของสัปดาห์ 5 จะรันในวันที่ 15 ของทุกเดือนและทุกวันศุกร์ — ไม่ใช่แค่วันศุกร์ที่ตรงกับวันที่ 15

