skip to content
xiengperm logo xiengperm
ภาพปกบทความ แขนกลสีเขียวยืนอยู่หน้านาฬิกาแขวนเรือนใหญ่ ข้างข้อความ Cron Expression แบบไม่ต้องท่อง

เข้าใจ cron expression แบบไม่ต้องท่อง ด้วย crontab.guru

/ 2 min read

Table of Contents

เคยเปิดไฟล์ตั้งค่าเซิร์ฟเวอร์แล้วเจอบรรทัดแบบ 0 9 * * 1-5 ไหมครับ? ตอนแรกผมก็งงว่าดอกจันกับตัวเลขพวกนี้มันคืออะไร แต่พอเข้าใจแล้วจะเห็นว่ามันคือวิธีบอกเวลาที่กระชับมากๆ นี่แหละคือ cron expression ภาษาสำหรับสั่งว่า “ให้ทำงานนี้ตอนไหน”

cron expression คืออะไร

cron คือตัวตั้งเวลารันงานอัตโนมัติบน Linux/Unix (เช่น สั่งให้ backup ทุกเที่ยงคืน หรือส่งอีเมลทุกเช้า) ส่วน “expression” ก็คือตารางเวลาที่เราเขียนให้มัน

มันมี 5 ช่อง เรียงกัน คั่นด้วยเว้นวรรค แต่ละช่องคือหน่วยเวลาที่ต่างกัน:

* * * * *
│ │ │ │ │
│ │ │ │ └── วันในสัปดาห์ (0-6, 0 = อาทิตย์)
│ │ │ └──── เดือน (1-12)
│ │ └────── วันที่ (1-31)
│ └──────── ชั่วโมง (0-23)
└────────── นาที (0-59)

อ่านจากซ้ายไปขวา: นาที → ชั่วโมง → วันที่ → เดือน → วันในสัปดาห์

แล้วเอาไปเขียนที่ไหน? ตารางพวกนี้อยู่ในไฟล์ที่เรียกว่า crontab แก้ได้ด้วยคำสั่ง crontab -e แต่ละบรรทัดคือ expression 5 ช่อง ตามด้วยคำสั่งที่อยากให้รัน แค่นั้นเลย

สัญลักษณ์ที่ต้องรู้ มีแค่ 4 ตัว

นี่คือหัวใจ จำ 4 ตัวนี้ก็อ่าน cron ได้เกินครึ่งแล้ว:

สัญลักษณ์ความหมายตัวอย่าง
*ทุกค่า* ในช่องนาที = ทุกนาที
,หลายค่า1,15,30 = นาทีที่ 1, 15, 30
-ช่วงค่า1-5 ในช่องวันในสัปดาห์ = จันทร์ถึงศุกร์
/ทุกๆ (step)*/15 = ทุกๆ 15 หน่วย

ตัวอย่างที่เจอบ่อย

พอรู้กฎแล้ว ลองอ่านพวกนี้ดูครับ:

Expressionแปลว่า
0 9 * * *ทุกวัน เวลา 9:00
*/15 * * * *ทุกๆ 15 นาที
0 0 * * 0ทุกวันอาทิตย์ เที่ยงคืน
0 9 * * 1-5จันทร์ถึงศุกร์ เวลา 9:00
30 2 1 * *วันที่ 1 ของทุกเดือน เวลา 2:30

เคล็ดลับเวลาอ่าน: ไล่ทีละช่องจากซ้าย แล้วถามตัวเองว่า “ช่องนี้เจาะจงค่าไหน หรือเป็น * (ปล่อยผ่าน)“

ขี้เกียจท่อง? ใช้ crontab.guru

ถ้าไม่อยากนั่งนับช่องเอง มีเว็บที่ผมใช้ประจำคือ crontab.guru พิมพ์ expression ลงไป มันแปลเป็นประโยคภาษาอังกฤษให้ทันที พร้อมบอกด้วยว่ารอบถัดไปจะรันเมื่อไหร่ (next run)

หน้าเว็บ crontab.guru แสดงนิพจน์ 5 4 ดอกจัน ดอกจัน ดอกจัน พร้อมคำแปล At 04 และตารางสัญลักษณ์

อย่างในรูป พิมพ์ 5 4 * * * มันบอกเลยว่า “At 04:05 ” (ทุกวันตี 4 ห้านาที) ด้านล่างยังมีตารางสรุปสัญลักษณ์กับ label แต่ละช่องให้ดูด้วย เหมาะมากเวลาต้องเขียน cron ที่ซับซ้อนแล้วอยากเช็กว่าเขียนถูกไหมก่อนเอาไปใช้จริง

เกร็ด: ทางลัด @daily, @reboot

นอกจากแบบ 5 ช่อง cron บางตัวยังรับ ชื่อย่อ (non-standard) ที่อ่านง่ายกว่า เช่น @daily (= 0 0 * * *), @hourly, @weekly, @monthly และ @reboot (รันตอนเครื่องบูต) ถ้าระบบที่ใช้รองรับ ก็เขียนแบบนี้ให้คนอ่านเข้าใจง่ายขึ้นได้

ส่วนตัวผมว่า cron เป็นหนึ่งในของที่ “ดูน่ากลัวตอนแรก แต่พอเข้าใจ 4 สัญลักษณ์กับลำดับ 5 ช่องแล้วก็จบ” ไม่ต้องท่อง แค่มี crontab.guru เปิดไว้อีกแท็บ เดี๋ยวก็คล่องเอง ครั้งหน้าเจอ * * * * * จะได้ไม่ต้องกลัวอีกครับ

// ─────

Share this post:

ก๊อปคำบรรยายแล้ว — วางในช่อง Facebook ได้เลย

Related Posts