ToolDeck

ตัวตรวจสอบนิพจน์ Cron

ตรวจสอบนิพจน์ cron และดูรายละเอียดแต่ละช่องอย่างครบถ้วน

ลองตัวอย่าง

นิพจน์ cron

minute hour day(month) month day(week)

นิพจน์ cron ถูกต้อง

รายละเอียดช่อง

Minute*/15(0–59)

ขยายเป็น: 0, 15, 30, 45

Hour0-6(0–23)

ขยายเป็น: 0, 1, 2, 3, 4, 5, 6

Day of month1,15(1–31)

ขยายเป็น: 1, 15

Month*(1–12)

ขยายเป็น: all (1–12)

Day of week1-5(0–6)

ขยายเป็น: 1, 2, 3, 4, 5

การตรวจสอบนิพจน์ Cron คืออะไร?

การตรวจสอบนิพจน์ cron คือกระบวนการตรวจสอบว่าสตริง cron ปฏิบัติตามกฎไวยากรณ์ที่ถูกต้องก่อนที่จะส่งถึง scheduler นิพจน์ cron ใช้ห้าช่องที่คั่นด้วยช่องว่าง (นาที ชั่วโมง วันในเดือน เดือน วันในสัปดาห์) เพื่อกำหนดตารางงานที่เกิดซ้ำ หากช่องใดมีค่าเกินช่วงที่อนุญาต ตัวดำเนินการที่ไม่ถูกต้อง หรือข้อผิดพลาดเชิงโครงสร้างเช่นจำนวนช่องไม่ถูกต้อง นิพจน์จะถูก scheduler ปฏิเสธเมื่อ deploy หรืออาจไม่ตรงกับเวลาทริกเกอร์ใดๆ อย่างเงียบๆ

การตรวจสอบนิพจน์ cron ออนไลน์ช่วยจับข้อผิดพลาดได้เร็วกว่าการ deploy ขึ้น production และรอให้งานพลาด ข้อผิดพลาดที่พบบ่อย ได้แก่ การเขียน 25 ในช่องชั่วโมง (ช่วงที่ถูกต้อง: 0-23), การใช้ step เป็นศูนย์ (*/0 ซึ่งไม่ได้กำหนดไว้), การสลับขอบเขต range (5-1 แทนที่จะเป็น 1-5) หรือการเพิ่มช่องพิเศษที่เป็นของรูปแบบที่ไม่ใช่มาตรฐานเช่น Quartz ตัวตรวจสอบไวยากรณ์จะแจ้งปัญหาเหล่านี้ทันทีและบอกว่าช่องใดที่ผิด

การตรวจสอบ cron แตกต่างจากการวิเคราะห์ cron ตัววิเคราะห์รับนิพจน์ที่ถูกต้องและแปลงเป็นตารางงานที่อ่านได้ง่าย ส่วนตัวตรวจสอบตอบคำถามที่ง่ายกว่า: นิพจน์นี้มีรูปแบบที่ถูกต้องหรือไม่? ตรวจสอบก่อนวิเคราะห์ — ไม่มีประโยชน์ที่จะส่งนิพจน์ที่ไม่ถูกต้องให้ scheduler ใน CI/CD pipelines การตรวจสอบ cron อัตโนมัติป้องกันไม่ให้ตารางงานที่เสียหายถูก merge เข้าไฟล์ config

ทำไมต้องใช้ตัวตรวจสอบ Cron นี้?

นิพจน์ cron มีกฎไวยากรณ์ที่เข้มงวด และ schedulers มักให้ข้อความแจ้งข้อผิดพลาดที่ไม่สอดคล้องกันเมื่อกฎเหล่านั้นถูกละเมิด บาง schedulers ปฏิเสธนิพจน์ด้วยข้อผิดพลาดที่อ่านยาก บางตัวยอมรับอย่างเงียบๆ และไม่ทำงาน ตัวตรวจสอบนี้ให้การวินิจฉัยที่ชัดเจนเป็นช่องต่อช่องก่อนที่คุณจะ deploy

ตรวจสอบไวยากรณ์ทันที
วางหรือพิมพ์นิพจน์ cron แล้วดูผลการตรวจสอบทันที ไม่ต้องส่งฟอร์ม ไม่มีความล่าช้า ผลลัพธ์อัปเดตขณะที่คุณพิมพ์
🔒
ประมวลผลโดยให้ความเป็นส่วนตัวเป็นหลัก
การตรวจสอบทั้งหมดทำงานในเบราว์เซอร์ของคุณ นิพจน์ cron และการตั้งค่าตารางงานของคุณไม่ถูกส่งไปยังเซิร์ฟเวอร์หรือจัดเก็บไว้ที่ใด
🔍
รายงานข้อผิดพลาดเป็นช่องต่อช่อง
เมื่อนิพจน์ไม่ถูกต้อง ตัวตรวจสอบจะระบุว่าช่องใดที่ทำให้เกิดข้อผิดพลาดและเพราะเหตุใด ไม่ต้องเดาว่าช่องใดในห้าช่องที่มีปัญหา
📋
ไม่ต้องสร้างบัญชี
เปิดหน้าเว็บแล้วเริ่มตรวจสอบได้เลย ไม่ต้องล็อกอิน ไม่ต้องใช้ API key ไม่ต้องติดตั้ง ใช้ได้บนทุกอุปกรณ์ที่มีเบราว์เซอร์รุ่นใหม่ รวมถึงมือถือ

กรณีการใช้งานตัวตรวจสอบ Cron

นักพัฒนา Frontend
ตรวจสอบนิพจน์ cron ที่ผู้ใช้ป้อนใน UI กำหนดตารางงานก่อนบันทึกลงฐานข้อมูล จับข้อผิดพลาดไวยากรณ์ที่ฝั่ง client แทนที่จะรอให้ backend ปฏิเสธ
วิศวกร Backend
ตรวจสอบนิพจน์ cron ในการตั้งค่า task queue (Celery beat, Hangfire, Quartz) ระหว่าง code review ตรวจสอบว่าสตริงตารางงานที่ถูก refactor ยังผ่านการตรวจสอบไวยากรณ์
DevOps / SRE
ตรวจสอบตาราง cron ใน Kubernetes CronJob manifests และการตั้งค่า CI/CD pipeline ก่อนนำไปใช้งาน ป้องกันการพิมพ์ผิดในตารางสำรองข้อมูลจากการถูกมองข้ามจนกว่าการสำรองข้อมูลจะพลาด
วิศวกร QA
ทดสอบว่าแอปพลิเคชันของคุณปฏิเสธ input cron ที่ไม่ถูกต้องอย่างถูกต้อง สร้างนิพจน์ที่รู้ว่าผิดพลาด (ค่าเกินช่วง, จำนวนช่องไม่ถูกต้อง) และยืนยันว่าการจัดการข้อผิดพลาดทำงานได้
วิศวกรข้อมูล
ตรวจสอบ cron triggers สำหรับ Airflow DAGs และการรัน dbt ตามตาราง ยืนยันว่าตาราง pipeline ที่วิเคราะห์จากไฟล์ config YAML หรือ JSON มีไวยากรณ์ที่ถูกต้องก่อน deploy
นักศึกษา / ผู้เรียน
ทดลองใช้ไวยากรณ์ cron และรับผลตอบกลับทันทีเกี่ยวกับสิ่งที่ถูกต้องและสิ่งที่ผิดพลาด เรียนรู้ช่วงค่าช่อง ตัวดำเนินการ และกรณีพิเศษโดยการทดสอบนิพจน์และอ่านข้อความแจ้งข้อผิดพลาด

ข้อผิดพลาดไวยากรณ์ Cron ที่พบบ่อย

ตารางด้านล่างแสดงข้อผิดพลาดนิพจน์ cron ที่พบบ่อยที่สุดและสาเหตุ เหล่านี้คือความผิดพลาดที่เกิดขึ้นซ้ำๆ ในการตั้งค่า production และ CI/CD pipelines

ประเภทข้อผิดพลาดตัวอย่างสิ่งที่ผิดพลาด
Too few fields0 9 * *Missing the day-of-week field. Standard cron requires exactly 5 fields.
Too many fields0 0 9 * * 1 2026Extra fields. Some tools add seconds or year, but standard cron uses 5.
Value out of range0 25 * * *Hour field accepts 0-23. Value 25 exceeds the maximum.
Invalid step base0 0 32/2 * *Day-of-month starts at 32, which exceeds the 1-31 range.
Step of zero*/0 * * * *Step value must be 1 or greater. Zero creates an infinite loop.
Empty field0 9 * * 1Double space creates an empty field. Each field needs a value.
Invalid character0 9 * * Mon-FryTypo in day name. Use three-letter abbreviations: MON, TUE, WED, THU, FRI, SAT, SUN.
Reversed range0 9 * * 5-1Range end (1) is less than start (5). Write 1-5 or use a list: 5,6,0,1.

นิพจน์ Cron ที่ถูกต้องและไม่ถูกต้อง

การอ้างอิงด่วนของนิพจน์ที่มีรูปแบบถูกต้องพร้อมกับข้อผิดพลาดที่พบบ่อย ใช้สิ่งนี้เพื่อตรวจสอบนิพจน์ของคุณก่อนวางในการตั้งค่า scheduler

นิพจน์ที่ถูกต้อง
* * * * *
0 9 * * 1-5
*/15 * * * *
0 0 1,15 * *
30 2 * * 0
0 */6 * * *
นิพจน์ที่ไม่ถูกต้อง
0 9 * *4 ช่อง ต้องการ 5
0 25 * * *ชั่วโมงสูงสุดคือ 23
*/0 * * * *step ไม่สามารถเป็น 0 ได้
0 9 * * 8วันในสัปดาห์สูงสุดคือ 6
60 * * * *นาทีสูงสุดคือ 59
0 0 0 * *วันในเดือนต่ำสุดคือ 1

ตัวอย่างโค้ด

วิธีตรวจสอบนิพจน์ cron ด้วยโปรแกรมใน JavaScript, Python, Go และ Bash แต่ละตัวอย่างแสดงวิธีจับไวยากรณ์ที่ไม่ถูกต้องและดึงข้อความแจ้งข้อผิดพลาดที่มีความหมาย

JavaScript (Node.js)
import { parseExpression } from 'cron-parser';

// Validate a cron expression by attempting to parse it
function validateCron(expr) {
  try {
    parseExpression(expr);
    return { valid: true, error: null };
  } catch (err) {
    return { valid: false, error: err.message };
  }
}

console.log(validateCron('0 9 * * 1-5'));
// → { valid: true, error: null }

console.log(validateCron('0 25 * * *'));
// → { valid: false, error: "Constraint error, got value 25 expected range 0-23" }

// Validate with field-level detail using cron-validator
import { isValidCron } from 'cron-validator';

isValidCron('*/15 * * * *');           // → true
isValidCron('*/15 * * * *', { seconds: true }); // → false (expects 6 fields)
isValidCron('0 0 31 2 *');             // → true (syntactically valid, Feb 31 never fires)
Python
from croniter import croniter

# Validate by checking if croniter can parse the expression
def validate_cron(expr: str) -> dict:
    if croniter.is_valid(expr):
        return {"valid": True, "error": None}
    # Get a more specific error message
    try:
        croniter(expr)
    except (ValueError, KeyError) as e:
        return {"valid": False, "error": str(e)}
    return {"valid": False, "error": "Unknown error"}

print(validate_cron("0 9 * * 1-5"))
# → {'valid': True, 'error': None}

print(validate_cron("0 25 * * *"))
# → {'valid': False, 'error': '...out of range...'}

print(validate_cron("* * *"))
# → {'valid': False, 'error': 'Exactly 5 or 6 columns...'}

# Field-level validation
from crontab import CronTab

cron = CronTab(tab="")
job = cron.new(command="/bin/true")
try:
    job.setall("0 9 * * 1-5")
    print(job.is_valid())  # → True
except Exception as e:
    print(f"Invalid: {e}")
Go
package main

import (
    "fmt"
    "github.com/robfig/cron/v3"
)

// ValidateCron checks whether a 5-field cron expression is syntactically correct
func ValidateCron(expr string) (bool, error) {
    parser := cron.NewParser(
        cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow,
    )
    _, err := parser.Parse(expr)
    if err != nil {
        return false, err
    }
    return true, nil
}

func main() {
    exprs := []string{
        "0 9 * * 1-5",   // valid
        "0 25 * * *",    // invalid: hour 25
        "*/15 * * * *",  // valid
        "0 0 32 * *",    // invalid: day 32
    }

    for _, e := range exprs {
        ok, err := ValidateCron(e)
        if ok {
            fmt.Printf("%-20s  VALID
", e)
        } else {
            fmt.Printf("%-20s  INVALID: %v
", e, err)
        }
    }
}
Bash
#!/bin/bash

# Validate cron syntax using Python one-liner
validate_cron() {
  python3 -c "
from croniter import croniter
import sys
expr = sys.argv[1]
if croniter.is_valid(expr):
    print(f'VALID: {expr}')
    sys.exit(0)
else:
    print(f'INVALID: {expr}')
    sys.exit(1)
" "$1"
}

validate_cron "0 9 * * 1-5"     # → VALID: 0 9 * * 1-5
validate_cron "0 25 * * *"      # → INVALID: 0 25 * * *

# Quick regex pre-check (catches field count and obvious issues)
cron_regex='^([0-9*/,-]+\s+){4}[0-9*/,-]+$'
echo "*/5 * * * *" | grep -Eq "$cron_regex" && echo "passes basic check"
echo "* * *" | grep -Eq "$cron_regex" || echo "fails basic check"

คำถามที่พบบ่อย

อะไรทำให้นิพจน์ cron ไม่ถูกต้อง?
นิพจน์ cron ไม่ถูกต้องเมื่อละเมิดกฎไวยากรณ์ของรูปแบบห้าช่อง สาเหตุที่พบบ่อย: จำนวนช่องไม่ถูกต้อง (น้อยกว่า 5 หรือมากกว่า 5 สำหรับ cron มาตรฐาน), ค่าเกินช่วงที่อนุญาต (เช่น hour 25, minute 60, day-of-month 0), step เป็นศูนย์ (*/0), ขอบเขต range สลับกัน (5-1) หรืออักขระที่ไม่รู้จัก นิพจน์ต้องมีห้าช่องที่คั่นด้วยช่องว่างพอดี พร้อมค่าและตัวดำเนินการที่ถูกต้องในแต่ละช่อง
นิพจน์ cron ถูกต้องหรือไม่หากไม่มีการทำงาน?
ใช่ ในแง่ไวยากรณ์ นิพจน์เช่น 0 0 31 2 * (วันที่ 31 กุมภาพันธ์) ผ่านการตรวจสอบไวยากรณ์เพราะแต่ละช่องมีค่าภายในช่วงที่อนุญาต แต่จะไม่ถูกทริกเกอร์เพราะกุมภาพันธ์ไม่มีวันที่ 31 ตัวตรวจสอบส่วนใหญ่ตรวจสอบไวยากรณ์เท่านั้น ไม่ตรวจสอบความถูกต้องเชิงความหมาย หากต้องการจับตารางงานที่ไม่สามารถเข้าถึงได้ ให้คำนวณเวลาทำงานถัดไป N ครั้งและตรวจสอบว่ารายการว่างเปล่า
จะตรวจสอบนิพจน์ cron แบบ 6 หรือ 7 ช่องได้อย่างไร?
POSIX cron มาตรฐานใช้ 5 ช่อง Quartz Scheduler เพิ่มช่องวินาทีที่จุดเริ่มต้น (6 ช่อง) และช่องปีเสริมที่ปลาย (7 ช่อง) AWS EventBridge ใช้ 6 ช่อง ตัวตรวจสอบนี้รองรับรูปแบบมาตรฐาน 5 ช่อง สำหรับการตรวจสอบนิพจน์ Quartz หรือ EventBridge ให้ใช้ library ที่รองรับรูปแบบขยาย เช่น cron-parser พร้อม option extended ใน Node.js หรือ quartz-cron ใน Java
สามารถใช้ชื่อวันและเดือนในนิพจน์ cron ได้ไหม?
การนำ cron ไปใช้งานส่วนใหญ่รับตัวย่อภาษาอังกฤษสามตัวอักษรสำหรับเดือน (JAN-DEC) และวันในสัปดาห์ (SUN-SAT) ค่าเหล่านี้ไม่คำนึงถึงตัวพิมพ์ใหญ่-เล็กใน crontab แต่อาจคำนึงถึงในระบบอื่น ชื่อไม่สามารถใช้ใน ranges ได้ทุกแพลตฟอร์ม: MON-FRI ใช้ได้ใน crontab แต่ไม่ใช่ทุก library หากความพกพาสำคัญ ให้ใช้ค่าตัวเลข (1-5 สำหรับจันทร์ถึงศุกร์)
ทำไมนิพจน์ cron ของฉันทำงานได้ใน crontab แต่ล้มเหลวใน Kubernetes?
Kubernetes CronJobs ใช้รูปแบบ 5 ช่องเหมือน crontab แต่วิเคราะห์โดย Go cron library ซึ่งมีการตรวจสอบที่เข้มงวดกว่า นิพจน์ที่ crontab ยอมรับ (เช่น trailing whitespace หรือการตั้ง day-of-month และ day-of-week เป็นค่าที่ไม่ใช่ wildcard ทั้งคู่) อาจทำงานต่างออกไป Kubernetes ยังใช้ timezone ของ controller-manager เป็นค่าเริ่มต้น (โดยทั่วไปคือ UTC) ไม่ใช่ timezone ท้องถิ่นของโหนด ควรตรวจสอบนิพจน์กับ scheduler เฉพาะที่คุณกำลัง deploy เสมอ
ควรตรวจสอบนิพจน์ cron ใน CI/CD pipeline อย่างไร?
เพิ่มขั้นตอนการตรวจสอบที่รันก่อน deployment ในโปรเจกต์ Node.js ให้ใช้ cron-parser หรือ cron-validator ในไฟล์ทดสอบที่อ่านสตริง cron จาก config และ assert ว่า parse ได้โดยไม่มีข้อผิดพลาด ใน Python ให้ใช้ croniter.is_valid() ใน shell script ให้เรียกฟังก์ชันตรวจสอบและออกด้วยรหัสที่ไม่ใช่ศูนย์เมื่อล้มเหลว วิธีนี้จะจับการพิมพ์ผิดและข้อผิดพลาดจากการคัดลอกวางก่อนที่จะถึง production
ความแตกต่างระหว่างการตรวจสอบ cron และการ lint cron คืออะไร?
การตรวจสอบจะตรวจว่านิพจน์มีไวยากรณ์ถูกต้องหรือไม่: จำนวนช่องถูกต้อง ค่าอยู่ในช่วง ตัวดำเนินการถูกต้อง การ lint ไปไกลกว่านั้นโดยตรวจหาข้อผิดพลาดที่น่าจะเป็นซึ่งถูกต้องทางเทคนิค: ตารางงานที่ไม่มีการทำงาน (31 ก.พ.), งานที่ทับซ้อน, ค่า step ที่ข้ามช่วงที่คาดหวัง (*/7 รีเซ็ตทุกชั่วโมง) หรือตารางงานที่ไม่มีเอกสาร timezone การตรวจสอบตอบ 'สิ่งนี้จะ parse ได้ไหม?' การ lint ตอบ 'นี่น่าจะเป็นสิ่งที่คุณต้องการหรือไม่?'