Cron expression ดูเหมือนตัวเลขและเครื่องหมายดอกจันสุ่ม แต่ควบคุมเมื่อไหร่ที่งานตั้งเวลาหลายล้านงานทำงานทั่วอินเทอร์เน็ต ไม่ว่าจะตั้งค่าสคริปต์สำรองข้อมูล ตั้งเวลาส่งรายงานอีเมล หรือกำหนดค่า CI/CD pipeline การเข้าใจ cron เป็นสิ่งจำเป็น บทเรียนนี้ทำให้ง่ายด้วย ตัวแปล Cron ฟรี
สิ่งที่ต้องใช้
- Cron expression ที่ต้องการถอดรหัส หรือตารางที่ต้องการเขียนเป็น cron
- เว็บเบราว์เซอร์ (Chrome, Firefox, Safari หรือ Edge)
- ไม่ต้องมีบัญชีหรือติดตั้ง
คู่มือทีละขั้นตอน
ป้อน cron expression
เปิดเครื่องมือ ตัวแปล Cron พิมพ์หรือวาง cron expression ลงในช่องป้อน ตัวอย่างเช่น ลอง 0 9 * * 1 เครื่องมือแปลทันทีแล้วแสดงความหมายเป็นภาษาง่ายๆ
อ่านผลลัพธ์ที่เข้าใจง่าย
ตัวแปลแปลง expression เป็นคำอธิบายที่ชัดเจน สำหรับ 0 9 * * 1 จะเห็นว่า "เวลา 09:00 ทุกวันจันทร์" เครื่องมือแสดงเวลารันถัดไปด้วย เพื่อให้ตรวจสอบว่าตารางทำงานตามที่คาดหวัง
ปรับแต่งและทดลอง
แก้ไข expression แล้วดูคำอธิบายอัปเดตเรียลไทม์ เปลี่ยนตัวเลข สลับดอกจันเป็นค่า หรือเพิ่มช่วง การตอบสนองทันทีนี้เป็นวิธีที่เร็วที่สุดในการเรียนรู้ cron syntax และสร้างตารางที่ต้องการ
ควรรู้ Cron expression ปกติมี 5 ช่อง: นาที ชั่วโมง วันของเดือน เดือน และวันของสัปดาห์ บางระบบเพิ่มช่องที่ 6 สำหรับวินาที แต่ 5 ช่องเป็นมาตรฐาน
ทำความเข้าใจ 5 ช่อง
Cron expression ประกอบด้วย 5 ช่องคั่นด้วยเว้นวรรค:
┌───────────── นาที (0-59)
│ ┌───────────── ชั่วโมง (0-23)
│ │ ┌───────────── วันของเดือน (1-31)
│ │ │ ┌───────────── เดือน (1-12)
│ │ │ │ ┌───────────── วันของสัปดาห์ (0-7, โดย 0 และ 7 คืออาทิตย์)
│ │ │ │ │
* * * * *
เครื่องหมายดอกจัน * หมายถึง "ทุกค่า" ตัวเลขหมายถึง "ตรงค่านี้" นี่คือพื้นฐาน — ทุกอย่างอื่นต่อยอดจากนี้
รูปแบบ cron ที่ใช้บ่อย
นี่คือรูปแบบที่ใช้บ่อยที่สุด พิมพ์รูปแบบใดก็ได้ลงใน ตัวแปล Cron เพื่อดูคำอธิบายและตรวจสอบ:
| Expression | ความหมาย |
|---|---|
* * * * * |
ทุกนาที |
0 * * * * |
ทุกชั่วโมง (ที่นาที 0) |
0 9 * * * |
ทุกวันเวลา 9:00 |
0 9 * * 1 |
ทุกวันจันทร์เวลา 9:00 |
0 9 * * 1-5 |
วันทำงานเวลา 9:00 |
0 0 1 * * |
วันแรกของทุกเดือนตอนเที่ยงคืน |
0 */6 * * * |
ทุก 6 ชั่วโมง |
30 8 * * 1,3,5 |
จันทร์ พุธ ศุกร์ เวลา 8:30 |
0 0 * * 0 |
ทุกวันอาทิตย์ตอนเที่ยงคืน |
*/15 * * * * |
ทุก 15 นาที |
เคล็ดลับ รูปแบบขั้น */n หมายถึง "ทุก n ช่วงเวลา" */15 ในช่องนาทีหมายถึงทุก 15 นาที (ที่นาที 0, 15, 30 และ 45 ของทุกชั่วโมง) รูปแบบช่วง 1-5 ในช่องวันของสัปดาห์หมายถึงจันทร์ถึงศุกร์
อักขระพิเศษอธิบาย
| อักขระ | ความหมาย | ตัวอย่าง |
|---|---|---|
* |
ทุกค่า | * * * * * = ทุกนาที |
, |
หลายค่า | 0 9,17 * * * = เวลา 9:00 และ 17:00 |
- |
ช่วงค่า | 0 9 * * 1-5 = วันทำงาน |
/ |
ช่วงขั้น | */10 * * * * = ทุก 10 นาที |
สร้าง expression ด้วยตัวเอง
สร้าง cron expression จากศูนย์โดยคิดตารางเป็นคำตอบของ 5 คำถาม:
- ที่นาทีไหน? (0-59 หรือ
*สำหรับทุกนาที) - ที่ชั่วโมงไหน? (0-23 หรือ
*สำหรับทุกชั่วโมง) - วันไหนของเดือน? (1-31 หรือ
*สำหรับทุกวัน) - เดือนไหน? (1-12 หรือ
*สำหรับทุกเดือน) - วันไหนของสัปดาห์? (0-7 หรือ
*สำหรับทุกวัน)
ตัวอย่าง "ทุกวันอังคารและพฤหัสบดีเวลา 14:30" จะเป็น: นาที=30, ชั่วโมง=14, วัน=, เดือน=, วันสัปดาห์=2,4 ได้ 30 14 * * 2,4
สำคัญ Cron ใช้เวลาแบบ 24 ชั่วโมง 9 โมงเช้าคือ 9 แต่ 3 ทุ่มคือ 21 โปรดทราบว่าโซนเวลาขึ้นอยู่กับเซิร์ฟเวอร์ที่รัน cron job ไม่ใช่เวลาท้องถิ่นของคุณ ยืนยันเสมอว่าระบบใช้โซนเวลาอะไร
คำถามที่พบบ่อย
ถ้าตั้งทั้งวันของเดือนและวันของสัปดาห์จะเป็นยังไง? ใน cron มาตรฐาน งานรันเมื่อเงื่อนไขใดเงื่อนไขหนึ่งเป็นจริง (เป็น OR ไม่ใช่ AND) ทำให้หลายคนเข้าใจผิด หากต้องการทั้งสองเงื่อนไข ใช้ wrapper script ที่ตรวจสอบวันที่
ตั้งให้รันทุก 2 ชั่วโมงได้ไหม?
ได้ ใช้ 0 */2 * * * ซึ่งรันที่นาที 0 ของทุกสองชั่วโมง
อะไรคือความแตกต่างระหว่าง cron แบบ 5 ช่องกับ 6 ช่อง? บางระบบ (เช่น Spring, Quartz) เพิ่มช่องวินาทีที่ต้น cron มาตรฐาน Unix ใช้ 5 ช่อง ตัวแปล Cron รองรับทั้งสองรูปแบบ
ขั้นตอนถัดไป
เมื่ออ่านและเขียน cron expression ได้แล้ว ลองสร้างตารางสำหรับโปรเจกต์ หากทำงานกับเครื่องมือนักพัฒนาอื่น ดู ตัวทดสอบ Regex สำหรับจับคู่รูปแบบ หรือ ตัวจัดรูปแบบ JSON สำหรับทำงานกับไฟล์ config