§

ป้อน cron expression หรือเลือกค่าตั้งต้นด้านล่าง

ค่าตั้งต้นด่วน:
§

10 รอบทำงานถัดไป

cron

ตารางเวลาที่อ่านได้จะปรากฏที่นี่...

    §

    สร้าง expression

    นักพัฒนาไทยพบ cron syntax ทุกชั้นของ stack: AWS EventBridge Scheduler รับรูปแบบนี้สำหรับ Lambda triggers, Kubernetes CronJob ใช้รูปแบบห้าฟิลด์เดียวกันบนทุกคลัสเตอร์ EKS/GKE และ GitHub Actions อ่านค่าตรงจาก `.github/workflows/*.yml` EventBridge เพิ่มฟิลด์ที่หกสำหรับปีและต้องการ `?` แทน `*` ในฟิลด์วัน Kubernetes ทำงานใน UTC เว้นแต่จะตั้งค่า `spec.timeZone` ไว้ เครื่องมือนี้แปล cron ที่คุณวาง แสดงเวลาทำงาน 10 ครั้งถัดไปในโซน IANA ที่คุณเลือก และช่วยสร้าง expression ทีละฟิลด์ก่อนนำขึ้น production

    Cron expression คืออะไร?

    Cron expression คือสตริงการกำหนดตารางเวลาแบบกะทัดรัดที่บอก job scheduler ว่าจะเรียกใช้งานเมื่อใดพอดี รูปแบบนี้เกิดขึ้นในปี 1975 ใน Unix V7 cron daemon และแทบไม่เปลี่ยนแปลงมาจนถึงปัจจุบัน — grammar ห้าฟิลด์เดิมปรากฏใน Kubernetes CronJobs, AWS EventBridge, GitHub Actions workflows, Google Cloud Scheduler, GitLab CI, Jenkins pipelines และ crontab binary ที่ยังคงมากับ Linux distribution ทุกตัว Grammar นี้บรรจุความหมายมากมายในอักขระประมาณสิบสามตัว ซึ่งเป็นเหตุผลที่ parser ที่แปลงเป็นภาษาอ่านง่ายเป็นความแตกต่างระหว่างการ deploy ที่มั่นใจกับการ rollback ตี 3

    Cron expression ทำงานอย่างไร?

    Cron expression มาตรฐานมีห้าฟิลด์คั่นด้วยช่องว่างที่รวมกันกำหนดตารางเวลาซ้ำ engine ตรวจสอบนาฬิกาปัจจุบันกับ expression ทุกนาทีและเรียกใช้งานเมื่อฟิลด์ทั้งห้าตรงกัน ฟิลด์จากซ้ายไปขวา:

    1. นาที (0–59). นาทีที่งานทำงาน 0 คือต้นชั่วโมง 30 คือครึ่งชั่วโมง */5 คือทุก 5 นาที และ 15,45 คือที่ 15 และ 45 นาที
    2. ชั่วโมง (0–23). ชั่วโมงในรูปแบบ 24 ชั่วโมง 0 คือเที่ยงคืน 9 คือ 09:00 น. 17 คือ 17:00 น. Ranges (9-17 สำหรับเวลาทำงาน) และ step values (*/2 ทุกสองชั่วโมง) ใช้ได้เหมือนกับนาที
    3. วันในเดือน (1–31). วันในปฏิทินที่ทำงาน 1 คือวันที่ 1 * คือทุกวัน 1,15 คือวันที่ 1 และ 15 ระวัง 31 — จะข้ามเดือนที่ไม่มี 31 วันอย่างเงียบๆ
    4. เดือน (1–12 หรือ JAN–DEC). เดือนที่ทำงาน * คือทุกเดือน 1,7 คือมกราคมและกรกฎาคม 1-3 คือไตรมาสแรก ชื่อเดือนสามตัวอักษรไม่คำนึงถึงตัวพิมพ์ในส่วนใหญ่
    5. วันในสัปดาห์ (0–7 โดย 0 และ 7 หมายถึงวันอาทิตย์). จำกัดการทำงานในวันเฉพาะ 1-5 คือวันจันทร์ถึงศุกร์ 0,6 คือสุดสัปดาห์ MON-FRI ใช้ได้กับ parser ส่วนใหญ่ เมื่อทั้ง day-of-month และ day-of-week ถูกตั้งค่าเฉพาะ cron แบบดั้งเดิมจะทำงานเมื่อตรงกันอย่างใดอย่างหนึ่ง (OR ตรรกะ) ซึ่งทำให้หลายคนแปลกใจทุกครั้ง

    ทำไมต้องใช้ cron expression parser?

    • จับการอ่านผิดแบบเงียบก่อน deploy ค่า `0 2 */3 * *` ทำงานเวลา 02:00 น. ทุกสามวัน ไม่ใช่ทุกสามนาที — วางที่นี่แล้วคุณจะเห็นเป็นภาษาอ่านง่ายก่อนนำขึ้น production
    • Cloud schedulers ส่วนใหญ่ทำงานใน UTC โดยค่าเริ่มต้น การดูเวลาทำงาน 10 ครั้งถัดไปในโซนท้องถิ่นของคุณจะเผยการเลื่อนเวลา DST หนึ่งชั่วโมงก่อนที่จะปลุกใครบางคนตี 3
    • ชื่อย่อ เช่น `@daily`, `@weekly` และ `@monthly` สะดวกแต่คลุมเครือ parser แสดงรูปแบบห้าฟิลด์ที่แท้จริงเพื่อให้รู้ว่ากำหนดไว้อย่างไร
    • ตัวสร้างทีละฟิลด์ให้คุณสร้างตารางเวลาทีละคอลัมน์และดูคำอธิบายอัปเดตสดๆ ซึ่งเร็วกว่าการอ่าน cron man page ซ้ำครั้งที่สิบมาก

    Cron expression ใช้ที่ไหนบ้าง?

    Cron syntax ปรากฏทุกที่ที่งานต้องทำซ้ำตามนาฬิกา สามพื้นที่พบบ่อยพร้อมข้อควรระวังที่มีชื่อเสียงของแต่ละที่:

    • ตารางเวลา Backup. รายการ `crontab -e` แบบดั้งเดิมที่ dump ฐานข้อมูลไปยัง S3 เวลา 02:00 น. ทุกคืน หรือหมุนเวียน `pg_dump` ในวันที่ 1 ของทุกเดือน บรรทัด `0 2 * * * /usr/local/bin/backup.sh` ถูก deploy บน Linux server มากกว่า cron บรรทัดอื่นใดในประวัติศาสตร์ ตั้งนาทีและชั่วโมงให้ถูกต้อง redirect stderr ไปที่ที่ถาวร และคุณแทนที่ checklist ด้วย script แบบ fire-and-forget
    • GitHub Actions `schedule` triggers. key `on.schedule.cron` ใน `.github/workflows/*.yml` รับ cron มาตรฐานห้าฟิลด์ แต่งานทำงานใน UTC เสมอและ GitHub จะข้ามเวลาทำงานหาก runner queue ยุ่ง รูปแบบทั่วไป: `cron: '0 9 * * 1-5'` เพื่อส่ง digest วันจันทร์ถึงศุกร์เวลา 09:00 UTC ดูตัวอย่างในโซนท้องถิ่นก่อนเพื่อไม่ให้สัญญา digest 09:00 กรุงเทพที่แท้จริงส่งผิดเวลา
    • AWS EventBridge Scheduler. Cron expressions ของ EventBridge มีฟิลด์ที่หกสำหรับปีและต้องการ `?` แทน `*` ในฟิลด์ day-of-month หรือ day-of-week — `cron(0 9 ? * MON-FRI *)` คือการแปล EventBridge ของ cron วันทำงาน 09:00 มาตรฐาน ใช้สำหรับ Lambda invocations ตามกำหนด, ECS task runs และ Step Function starts; ความไม่สอดคล้องกับ cron มาตรฐานเป็นสาเหตุอันดับหนึ่งของ error `ValidationException` ใน CloudFormation deploys

    Cron expression จริงมีลักษณะอย่างไร?

    ลอง 0 9 * * 1-5 — ทำงานเวลา 09:00 น. ทุกวันทำงาน อ่านฟิลด์จากซ้ายไปขวา: 0 คือนาทีที่ศูนย์, 9 คือ 09:00 น. นาฬิกา 24 ชั่วโมง, * ในวันของเดือนคือทุกวัน, * ในเดือนคือทุกเดือน, และ 1-5 ในวันของสัปดาห์จำกัดการทำงานเป็นวันจันทร์ถึงศุกร์ วาง expression นี้ในช่องด้านบนและ parser ยืนยัน เวลา 09:00 น. วันจันทร์ถึงศุกร์ พร้อมเวลาทำงาน 10 ครั้งถัดไปในโซน IANA ที่คุณเลือก รูปแบบเดียวกันใน AWS EventBridge คือ cron(0 9 ? * MON-FRI *) — สังเกตฟิลด์ปีที่ท้ายและ ? ที่ cron มาตรฐานจะใช้ * รูปแบบเดียวกันเป็น Quartz expression (หกฟิลด์มี leading seconds) คือ 0 0 9 ? * MON-FRI สามแพลตฟอร์มต่างกัน สามรูปแบบต่างกัน ตารางเวลาพื้นฐานเดียวกัน

    Cron expressions ไม่ให้อภัยในแง่เดียว: การพิมพ์ผิดทำให้ได้ตารางเวลาที่ถูกต้องทางไวยากรณ์ที่ทำงานในเวลาผิด โดยไม่มีข้อผิดพลาดในการ code review การอ่าน `0 0 1 * *` และรู้ว่าทำงานเที่ยงคืนของวันที่ 1 ทุกเดือน ไม่ใช่ 1 มกราคม ต้องอาศัยประสบการณ์ parser ด้านบนเปลี่ยนประสบการณ์นั้นเป็นการตรวจสอบสิบวินาที — วาง expression อ่านภาษาไทย ดูเวลาทำงาน 10 ครั้งถัดไปในโซนท้องถิ่น และ deploy YAML ด้วยความมั่นใจ

    ความแตกต่างระหว่าง cron 5 ฟิลด์กับ 6 ฟิลด์คืออะไร?

    Cron ห้าฟิลด์คือ grammar Unix ดั้งเดิมที่มีความละเอียดหนึ่งนาที Cron หกฟิลด์เพิ่มคอลัมน์วินาทีนำสำหรับการกำหนดเวลาต่ำกว่านาที — ใช้โดย Quartz และ Spring’s @Scheduled AWS EventBridge ใช้หกฟิลด์เช่นกัน แต่คอลัมน์พิเศษคือปีที่ต่อท้าย ไม่ใช่วินาที

    @hourly, @daily และ @weekly หมายความว่าอะไร?

    ชื่อย่อ Vixie-cron ที่แนะนำในปี 1987 @hourly = 0 * * * *, @daily = 0 0 * * *, @weekly = 0 0 * * 0, @monthly = 0 0 1 * *, @yearly = 0 0 1 1 * @reboot ทำงานครั้งเดียวเมื่อ boot GitHub Actions และ EventBridge ไม่รับ aliases เหล่านี้

    วันอาทิตย์เป็นวันที่ 0 หรือ 7 ใน cron?

    ทั้งสอง ใน Vixie cron แบบดั้งเดิม — ทั้ง 0 และ 7 ถูกยอมรับเพื่อให้ ranges เช่น 5-7 อ่านเป็นศุกร์ถึงอาทิตย์ได้ตามธรรมชาติ วันจันทร์เสมอคือ 1 วันเสาร์เสมอคือ 6 Quartz และ AWS EventBridge ใช้ convention ต่างกัน: 1-7 โดยวันอาทิตย์เป็น 1 ตรวจสอบเอกสาร platform ก่อนสมมติ

    Cron จัดการ daylight saving time อย่างไร?

    ขึ้นอยู่กับโซนเวลาของ engine ใน UTC (ค่าเริ่มต้นของ EventBridge, Kubernetes และ GitHub Actions) DST ไม่มีอยู่ ในโซน DST ท้องถิ่น Vixie cron แบบดั้งเดิมจะข้ามงานในช่วง spring-forward gap และทำงานสองครั้งในช่วง fall-back; systemd timers ทำงานครั้งเดียวพอดี