คู่มือฉบับสมบูรณ์: Cron Expression Builder — ควบคุมการตั้งเวลาทำงานอัตโนมัติ
เรียนรู้วิธีสร้าง อ่าน และดีบัก cron expression ด้วยตัวสร้างแบบภาพ ครอบคลุม syntax 5 ฟิลด์และ 6 ฟิลด์ อักขระพิเศษ รูปแบบที่ใช้บ่อย และแนวทางปฏิบัติที่ดี
Table of Contents
คู่มือฉบับสมบูรณ์: Cron Expression Builder — ควบคุมการตั้งเวลาทำงานอัตโนมัติ
ถ้าคุณเคยเขียน cron expression ด้วยมือแล้วเผลอพิมพ์ผิดไปแค่ตัวเดียว จู่ ๆ งานสำคัญก็ไม่ทำงานตามเวลาที่คาดไว้ หรือทำงานผิดจังหวะจนระบบพังตอนดึก คุณคงรู้ดีว่า cron syntax ตัวเล็ก ๆ แค่ห้าถึงหกช่องนั้นมีพลังมหาศาลแค่ไหน 0 2 * * * กับ 0 * 2 * * ดูเหมือนใกล้เคียงกัน แต่ความหมายห่างกันเป็นคนละโลก
Cron คือระบบตั้งเวลาทำงานอัตโนมัติที่อยู่คู่กับระบบปฏิบัติการตระกูล Unix มาตั้งแต่ทศวรรษ 1970 ปัจจุบัน cron ยังเป็นแกนหลักของการ automation ในงาน DevOps ไม่ว่าจะเป็นการ backup ฐานข้อมูล ส่งรายงานอัตโนมัติ หรือ trigger pipeline สำหรับ CI/CD ปัญหาคือ syntax ของ cron อ่านยาก เพราะมันเป็นเพียงสตริงตัวเลขและอักขระพิเศษที่เรียงกันอย่างกระชับ ทำให้เกิดข้อผิดพลาดได้ง่าย
Cron Expression Builder คือเครื่องมือที่แก้ปัญหานี้โดยตรง แทนที่จะนั่งนับฟิลด์และคำนวณเวลาในใจ คุณสามารถสร้าง cron expression ผ่านอินเทอร์เฟซแบบภาพ พร้อมเห็นคำอธิบายเป็นภาษามนุษย์และเวลาทำงานครั้งถัดไปทันที ลองใช้งานได้เลยที่ /th/tools/cron-expression-builder
ทำไมต้องใช้ Cron Expression Builder?
การเขียน cron expression ด้วยมืออาจทำได้สำหรับรูปแบบพื้นฐาน แต่เมื่อ schedule เริ่มซับซ้อน ความเสี่ยงในการพลาดก็เพิ่มขึ้นตามไปด้วย Cron Expression Builder ช่วยลดความเสี่ยงเหล่านี้ได้ทั้งหมด
- ความถูกต้องแม่นยำ — ลดความเสี่ยงจากการพิมพ์ผิดหรือสลับตำแหน่งฟิลด์ ซึ่งเป็นสาเหตุอันดับหนึ่งของ cron ที่ทำงานผิดพลาด
- เห็นผลในภาษามนุษย์ — แปลง expression เป็นคำอธิบายที่อ่านเข้าใจได้ทันที เช่น "ทุกวัน เวลา 02:30 น." ทำให้มั่นใจได้ก่อนนำไปใช้
- พรีวิวเวลาทำงานครั้งถัดไป — แสดงวันและเวลาครั้งถัดไปที่ schedule จะ trigger ช่วยให้ตรวจสอบได้ว่าตรงกับที่ต้องการจริง
- รองรับทั้ง 5 ฟิลด์และ 6 ฟิลด์ — ทำงานได้กับทั้ง cron มาตรฐานของ Linux และรูปแบบ 6 ฟิลด์ที่ใช้ในระบบอย่าง Spring, Quartz, หรือ AWS EventBridge
- ประหยัดเวลา — สร้าง expression ที่พร้อมใช้งานได้ภายในไม่กี่วินาที แทนที่จะต้องเปิด cheatsheet และนับฟิลด์ทีละตัว
- ทำงานบนเบราว์เซอร์ — ไม่ต้องติดตั้งซอฟต์แวร์ ไม่ต้องลงทะเบียน ไม่ต้องส่งข้อมูลไปยังเซิร์ฟเวอร์ภายนอก เปิดใช้งานได้ทันที
- เหมาะสำหรับการทำงานเป็นทีม — แชร์ expression ที่สร้างขึ้นให้เพื่อนร่วมทีมตรวจสอบ ลดความเสี่ยงของการ deploy schedule ที่ผิดพลาดลง production
คุณสมบัติเด่น
Cron Expression Builder ออกแบบมาเพื่อนักพัฒนาและวิศวกร DevOps โดยเฉพาะ ทั้งในระดับเริ่มต้นและขั้นสูง
รูปแบบที่รองรับ
| รูปแบบ | จำนวนฟิลด์ | ตัวอย่าง | การใช้งานทั่วไป |
|---|---|---|---|
| Standard (Vixie cron) | 5 ฟิลด์ | 0 2 * * * | crontab บน Linux/Unix |
| รวมวินาที | 6 ฟิลด์ | 0 0 2 * * * | Spring Scheduling, Quartz |
| AWS EventBridge | 6 ฟิลด์ | 0 9 ? * MON-FRI * | AWS CloudWatch Events / EventBridge |
ฟีเจอร์หลัก
- Visual Builder — เลือกค่าแต่ละฟิลด์ผ่าน dropdown และ input แบบมีโครงสร้าง ไม่ต้องจำ syntax
- Human-readable Description — แปลง expression เป็นประโยคภาษาไทยและอังกฤษทันที เช่น "ทุก 15 นาที ระหว่างเวลา 09:00–17:00 น."
- Next Run Preview — คำนวณและแสดงเวลาทำงานครั้งถัดไป 3–5 ครั้ง เพื่อยืนยันว่า schedule ทำงานตามที่คาดไว้
- Bi-directional — สร้าง expression จากการเลือกค่า หรือวาง expression ที่มีอยู่เพื่อถอดรหัสเป็นคำอธิบาย
- Validation — ตรวจสอบความถูกต้องของ expression ทันที เช่น ค่าที่เกินช่วงที่กำหนดหรือรูปแบบที่ไม่ถูกต้อง
- Copy & Export — คัดลอก expression ที่สร้างขึ้นไปใช้ใน crontab, configuration file, หรือ IaC ได้ทันที
- Timezone Aware — ระบุ timezone สำหรับการคำนวณเวลาทำงานครั้งถัดไป สำคัญมากสำหรับระบบที่กระจายอยู่หลายภูมิภาค
วิธีใช้งาน Cron Expression Builder
การสร้าง cron expression กับเครื่องมือนี้ใช้เวลาเพียงไม่กี่ขั้นตอน
- เลือกรูปแบบ expression — เริ่มจากเลือกว่าจะใช้ cron แบบ 5 ฟิลด์ (มาตรฐาน Linux) หรือ 6 ฟิลด์ (รวมวินาที หรือสำหรับ AWS EventBridge) การเลือกที่ถูกต้องตั้งแต่ต้นจะช่วยให้ expression ที่ได้ทำงานได้กับระบบเป้าหมายของคุณ
- กำหนดค่าแต่ละฟิลด์ — ตั้งค่านาที ชั่วโมง วันของเดือน เดือน และวันของสัปดาห์ ผ่านอินเทอร์เฟซแบบภาพ คุณสามารถเลือกค่าคงที่ ใช้ช่วง (range) ใช้ list หรือใช้ step value ได้ตามต้องการ
- ตรวจสอบคำอธิบาย — อ่านคำอธิบายที่เครื่องมือสร้างขึ้น เช่น "ทุกวันจันทร์ถึงวันศุกร์ เวลา 09:00 น." หากไม่ตรงกับที่ต้องการ ให้กลับไปปรับฟิลด์ที่เกี่ยวข้อง
- ดูเวลาทำงานครั้งถัดไป — ตรวจสอบเวลา trigger ครั้งถัดไป 3–5 ครั้ง เพื่อยืนยันว่า schedule ตรงกับความต้องการจริง โดยเฉพาะเมื่อใช้รูปแบบที่ซับซ้อน เช่น step value หรือ combination ของฟิลด์
- คัดลอกไปใช้งาน — เมื่อมั่นใจแล้ว กดปุ่มคัดลอกเพื่อนำ expression ไปวางใน crontab, Kubernetes CronJob, AWS EventBridge rule, หรือ configuration file ของแอปพลิเคชัน
💡 เคล็ดลับ: หากคุณมี cron expression ที่สืบทอดมาจากโครงการเก่าและไม่แน่ใจว่ามันทำงานยังไง ให้วางลงในช่อง input แล้วดูคำอธิบายและเวลาทำงานครั้งถัดไป เป็นวิธีที่เร็วที่สุดในการทำความเข้าใจ schedule ที่มีอยู่
เริ่มใช้งานได้เลยที่ /th/tools/cron-expression-builder
ทำความเข้าใจ Syntax ของ Cron
Cron expression ประกอบด้วยฟิลด์ที่เรียงต่อกันด้วยช่องว่าง แต่ละฟิลด์กำหนดหน่วยเวลาหนึ่งหน่วย การเข้าใจโครงสร้างนี้คือพื้นฐานของการใช้ cron ได้อย่างมีประสิทธิภาพ
โครงสร้าง 5 ฟิลด์ (มาตรฐาน)
รูปแบบ cron มาตรฐานที่ใช้บน crontab ของ Linux ประกอบด้วย 5 ฟิลด์เรียงจากซ้ายไปขวาดังนี้
# ┌───────────── นาที (0–59) # │ ┌───────────── ชั่วโมง (0–23) # │ │ ┌───────────── วันของเดือน (1–31) # │ │ │ ┌───────────── เดือน (1–12 หรือ JAN–DEC) # │ │ │ │ ┌───────────── วันของสัปดาห์ (0–7 หรือ SUN–SAT, ทั้ง 0 และ 7 คือวันอาทิตย์) # │ │ │ │ │ # * * * * *
ตัวอย่างเช่น 30 2 * * * หมายถึง "เวลา 02:30 น. ของทุกวัน" เพราะนาที = 30, ชั่วโมง = 2, และฟิลด์ที่เหลือเป็น * คือทุกค่า
ตารางอธิบายแต่ละฟิลด์
| ฟิลด์ | ช่วงค่าที่ใช้ได้ | ค่าพิเศษที่รองรับ | ตัวอย่าง | ความหมาย |
|---|---|---|---|---|
| นาที (minute) | 0–59 | *, ,, -, / | */15 | ทุก 15 นาที |
| ชั่วโมง (hour) | 0–23 | *, ,, -, / | 9-17 | ระหว่างเวลา 09:00–17:59 น. |
| วันของเดือน (day) | 1–31 | *, ,, -, /, L, W | 15W | วันทำการที่ใกล้วันที่ 15 ที่สุด |
| เดือน (month) | 1–12 หรือ JAN–DEC | *, ,, -, / | JUN,JUL,AUG | เดือนมิถุนายน กรกฎาคม สิงหาคม |
| วันของสัปดาห์ (weekday) | 0–7 หรือ SUN–SAT | *, ,, -, /, L, # | MON-FRI | วันจันทร์ถึงวันศุกร์ |
อักขระพิเศษใน Cron
cron ใช้อักขระพิเศษเพื่อกำหนดรูปแบบเวลาที่ซับซ้อน การเข้าใจอักขระเหล่านี้จะช่วยให้คุณเขียน expression ที่ทรงพลังได้
| อักขระ | ชื่อ | ความหมาย | ตัวอย่าง | ผลลัพธ์ |
|---|---|---|---|---|
| * | Asterisk | ทุกค่าในช่วงของฟิลด์นั้น | * * * * * | ทุกนาทีของทุกวัน |
| , | Comma | ระบุหลายค่าใน list | 0,15,30,45 | นาทีที่ 0, 15, 30, 45 |
| - | Hyphen | กำหนดช่วง (range) ระหว่างสองค่า | 9-17 | ตั้งแต่ 9 ถึง 17 |
| / | Slash | กำหนด step value เริ่มจากค่าแรก ทุก ๆ ค่าที่กำหนด | */10 | เริ่มจาก 0 แล้วทุก 10 (0, 10, 20, 30…) |
| L | Last | ใช้กับ day หรือ weekday เพื่อระบุค่าสุดท้าย | 0 0 * * 5L | เที่ยงคืนของวันศุกร์สุดท้ายของเดือน |
| W | Weekday | ระบุวันทำการที่ใกล้ที่สุด (จันทร์–ศุกร์) | 15W | วันทำการที่ใกล้วันที่ 15 ที่สุด |
| # | Hash | ระบุลำดับสัปดาห์ของวันในเดือน (ใช้กับ weekday) | 0 0 ? * 2#3 | เที่ยงคืนของวันอังคารสัปดาห์ที่ 3 |
| ? | Question | ใช้แทน "ไม่กำหนด" ในฟิลด์ day หรือ weekday (มักใช้ใน Quartz/AWS) | ? | ไม่สนใจฟิลด์นี้ |
⚠️ ข้อควรระวัง: ฟิลด์ "วันของเดือน" และ "วันของสัปดาห์" มีความสัมพันธ์แบบ OR ใน cron มาตรฐาน นั่นคือถ้ากำหนดทั้งสองฟิลด์ (ไม่ใช่ *) งานจะทำงานเมื่อตรงกับเงื่อนไข อย่างใดอย่างหนึ่ง ไม่ใช่ทั้งคู่ ในระบบ Quartz หรือ AWS ให้ใช้ ? เพื่อระบุว่าไม่สนใจฟิลด์นั้น
รูปแบบ Cron ที่ใช้บ่อย
นี่คือตารางอ้างอิดของ cron expression ที่นักพัฒนาและวิศวกร DevOps ใช้บ่อยที่สุด คุณสามารถคัดลอกและปรับค่าได้ตามต้องการ
| รูปแบบ | Expression | ความหมาย |
|---|---|---|
| ทุกนาที | * * * * * | ทำงานทุก 1 นาที ตลอดเวลา |
| ทุก 5 นาที | */5 * * * * | ทำงานทุก 5 นาที เริ่มนาทีที่ 0 |
| ทุก 15 นาที | */15 * * * * | ทำงานทุก 15 นาที (0, 15, 30, 45) |
| ทุกชั่วโมง | 0 * * * * | ทำงานที่นาทีแรกของทุกชั่วโมง |
| ทุกวันเที่ยงคืน | 0 0 * * * | ทำงานทุกวัน เวลา 00:00 น. |
| ทุกวัน 6 โมงเช้า | 0 6 * * * | ทำงานทุกวัน เวลา 06:00 น. |
| ทุกวันจันทร์ 9 โมง | 0 9 * * 1 | ทำงานทุกวันจันทร์ เวลา 09:00 น. |
| จันทร์–ศุกร์ 9 โมง | 0 9 * * 1-5 | ทำงานวันธรรมดา เวลา 09:00 น. |
| วันที่ 1 ของเดือน | 0 0 1 * * | ทำงานเที่ยงคืนของวันแรกของทุกเดือน |
| ทุกวันอาทิตย์ | 0 0 * * 0 | ทำงานเที่ยงคืนของทุกวันอาทิตย์ |
| ทุก 6 ชั่วโมง | 0 */6 * * * | ทำงานทุก 6 ชั่วโมง (00:00, 06:00, 12:00, 18:00) |
| ทุกไตรมาส | 0 0 1 1,4,7,10 * | ทำงานเที่ยงคืนของวันที่ 1 เดือน ม.ค., เม.ย., ก.ค., ต.ค. |
| วันสุดท้ายของเดือน | 0 0 L * * | ทำงานเที่ยงคืนของวันสุดท้ายของทุกเดือน (รองรับ L) |
กรณีศึกษาการใช้งานจริง
cron ไม่ได้ใช้แค่ใน crontab ของเซิร์ฟเวอร์เท่านั้น แต่อยู่ในทุกที่ที่มีการ automation ดูตัวอย่างการนำไปใช้ในสถานการณ์จริง 3 กรณี
1. สำรองข้อมูลฐานข้อมูลทุกคืน
การ backup ฐานข้อมูลเป็นงานอัตโนมัติที่จำเป็นที่สุดอย่างหนึ่ง คุณต้องการให้ backup ทำงานในช่วงที่ระบบมีโหลดต่ำที่สุด ซึ่งมักเป็นช่วงดึก
# สำรองข้อมูลทุกคืน เวลา 02:00 น. 0 2 * * * /opt/scripts/backup-database.sh >> /var/log/backup.log 2>&1
ในกรณีนี้ 0 2 * * * หมายถึงนาทีที่ 0 ของชั่วโมงที่ 2 ของทุกวัน หากคุณต้องการสำรองเฉพาะวันธรรมดาเพื่อประหยัดพื้นที่จัดเก็บ ก็เปลี่ยนเป็น 0 2 * * 1-5
2. ส่งรายงานประจำสัปดาห์ทุกวันจันทร์
ทีมการตลาดต้องการรับรายงานสรุปยอดขายและผู้ใช้ใหม่ทุกวันจันทร์เวลา 09:00 น. เพื่อนำไปประชุมวางแผน
# ส่งรายงานทุกวันจันทร์ เวลา 09:00 น. 0 9 * * 1 /opt/scripts/send-weekly-report.sh
หากต้องการส่งในวันแรกของทุกเดือนด้วย ก็สร้าง schedule เพิ่มอีกบรรทัด:
# รายงานรายเดือน วันที่ 1 ของเดือน เวลา 09:00 น. 0 9 1 * * /opt/scripts/send-monthly-report.sh
💡 Cron Expression Builder ช่วยให้คุณสร้างและเปรียบเทียบหลาย schedule พร้อมกันได้ ทำให้มั่นใจว่ารายงานแต่ละประเภทถูกส่งในเวลาที่เหมาะสม
3. Deploy อัตโนมัติบน Kubernetes ด้วย CronJob
Kubernetes CronJob ใช้ cron expression เดียวกันในการกำหนดเวลา สมมติคุณต้องการ trigger job ที่ล้าง cache ทุก 6 ชั่วโมง และ sync ข้อมูลจาก API ภายนอกทุก 30 นาทีระหว่างเวลาทำการ
# CronJob: ล้าง cache ทุก 6 ชั่วโมง
apiVersion: batch/v1
kind: CronJob
metadata:
name: cache-cleanup
spec:
schedule: '0 */6 * * *'
jobTemplate:
spec:
template:
spec:
containers:
- name: cleanup
image: my-app/cleanup:latest
# CronJob: sync ข้อมูลทุก 30 นาที ระหว่าง 09:00–18:00 น. วันจันทร์–ศุกร์
apiVersion: batch/v1
kind: CronJob
metadata:
name: data-sync
spec:
schedule: '*/30 9-18 * * 1-5'
jobTemplate:
spec:
template:
spec:
containers:
- name: sync
image: my-app/sync:latest
expression */30 9-18 * * 1-5 อาจดูซับซ้อนเมื่ออ่านครั้งแรก แต่เมื่อนำไปวางใน Cron Expression Builder คุณจะเห็นคำอธิบายทันทีว่า "ทุก 30 นาที ระหว่างเวลา 09:00–18:59 น. วันจันทร์ถึงวันศุกร์" พร้อมเวลาทำงานครั้งถัดไปเพื่อยืนยัน
แนวทางปฏิบัติที่ดี
การเขียน cron expression ที่ดีไม่ได้แค่เรื่อง syntax ที่ถูกต้อง แต่ยังรวมถึงการออกแบบ schedule ที่ปลอดภัย ดูแลรักษาง่าย และไม่สร้างปัญหาในอนาคต
- เลือกช่วงเวลาที่โหลดต่ำ — สำหรับงานหนัก เช่น backup, batch processing หรือ reindex ให้ตั้งเวลาในช่วงดึก เช่น 02:00–04:00 น. เพื่อหลีกเลี่ยงการกระทบผู้ใช้งาน
- กระจายเวลาไม่ให้ทับซ้อน — หลีกเลี่ยงการตั้ง schedule หลายตัวให้ทำงานพร้อมกันที่เที่ยงคืน (0 0 * * *) เพราะจะสร้าง spike ของทรัพยากร ให้เลื่อนเวลาแต่ละ job ห่างกัน 5–10 นาที เช่น 0 0 * * *, 10 0 * * *, 20 0 * * *
- ใส่ timezone ในเอกสาร — เมื่อทำงานกับทีมข้ามภูมิภาค ให้ระบุ timezone ของ cron expression ไว้เสมอ เช่น "เวลา 09:00 น. ICT (UTC+7)" เพื่ะป้องกันความสับสน โปรดทราบว่า crontab ของเซิร์ฟเวอร์ใช้ timezone ของเซิร์ฟเวอร์เป็นหลัก
- จัดทำเอกสารให้ expression ที่ซับซ้อน — expression เช่น 0 0 14 * MON หรือ 30 6 1W * * อาจดูสับสนเมื่อกลับมาอ่านในอีกหลายเดือน ให้เขียนคอมเมนต์อธิบายไว้ใน configuration file หรือเอกสารประกอบ
- ทดสอบก่อน deploy จริง — ก่อนนำ schedule ใหม่ไปใช้ใน production ให้ทดสอบในสภาพแวดล้อม staging หรือตรวจสอบเวลาทำงานครั้งถัดไปผ่าน Cron Expression Builder เพื่อยืนยันว่า trigger ตรงตามที่คาดไว้จริง ๆ
- หลีกเลี่ยง interval ที่สั้นเกินไป — การรัน job ทุกนาที (* * * * *) หรือทุก 2 นาทีอาจสร้างภาระที่ไม่จำเป็น หากต้องการตรวจสอบสถานะบ่อย ๆ ให้พิจารณาใช้ระบบ event-driven เช่น message queue หรือ webhook แทน cron
- ตั้งค่า timeout และ retry — cron job ควรมี timeout ที่ชัดเจน เพื่อป้องกันการทำงานค้าง และควรมีกลไก retry สำหรับกรณีที่ job ล้มเหลวชั่วคราว อย่าให้ job ตัวเดิมรันซ้อนกันโดยใช้ lock file หรือ concurrency policy ของระบบ
เริ่มตั้งเวลาทำงานวันนี้
ไม่ว่าคุณจะเป็นนักพัฒนาที่ดูแลระบบ backend, วิศวกร DevOps ที่บริหาร pipeline, หรือเจ้าของธุรกิจที่ต้องการส่งรายงานอัตโนมัติ Cron Expression Builder ช่วยให้คุณสร้าง schedule ที่ถูกต้องได้อย่างรวดเร็วและมั่นใจ
เครื่องมือนี้ทำงานบนเบราว์เซอร์ ฟรี ไม่ต้องลงทะเบียน และข้อมูลของคุณไม่หลุดไปยังเซิร์ฟเวอร์ใด ๆ เริ่มสร้าง cron expression แรกของคุณได้ทันทีที่ /th/tools/cron-expression-builder
เครื่องมือที่เกี่ยวข้อง:
- Cron Parser — ถอดรหัส cron expression ที่มีอยู่ให้เป็นคำอธิบายภาษามนุษย์ พร้อมแสดงเวลาทำงานครั้งถัดไป
- Timezone Converter — แปลงเวลาระหว่าง timezone ต่าง ๆ สำคัญสำหรับการวาง schedule ข้ามภูมิภาค
- Time Duration Calculator — คำนวณระยะเวลาระหว่างสองจุดเวลา ใช้วางแผนหน้าต่างการทำงาน (maintenance window)
- JSON Formatter — จัดรูปแบบ configuration file สำหรับ CronJob หรือ EventBridge rule ให้อ่านง่าย
ขอให้สนุกกับการตั้งเวลา!