ToolDeck

ตัวแยกวิเคราะห์นิพจน์ Cron

วิเคราะห์นิพจน์ cron ให้เป็นคำอธิบายที่อ่านได้ง่าย และแสดงตัวอย่างเวลาทำงานถัดไป

ลองตัวอย่าง

นิพจน์ cron

minute hour day(month) month day(week)

คำอธิบายที่อ่านได้ง่าย

At 9:00 AM, Mon, Tue, Wed, Thu, Fri

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

Minute

0

0–59

Hour

9

0–23

Day (month)

*

1–31

Month

*

1–12

Day (week)

1-5

0–6

10 ครั้งทำงานที่กำหนดไว้ถัดไป

12026-03-26 09:00:00
22026-03-27 09:00:00
32026-03-30 09:00:00
42026-03-31 09:00:00
52026-04-01 09:00:00
62026-04-02 09:00:00
72026-04-03 09:00:00
82026-04-06 09:00:00
92026-04-07 09:00:00
102026-04-08 09:00:00

การวิเคราะห์นิพจน์ Cron คืออะไร?

นิพจน์ cron คือสตริงที่ประกอบด้วยห้าช่องคั่นด้วยช่องว่าง ซึ่งกำหนดตารางงานที่เกิดซ้ำ รูปแบบนี้มีต้นกำเนิดจาก Unix cron daemon ที่ Ken Thompson เขียนขึ้นสำหรับ Version 7 Unix ในปี 1979 แต่ละช่องแทนหน่วยเวลา ได้แก่ นาที ชั่วโมง วันในเดือน เดือน และวันในสัปดาห์ การวิเคราะห์นิพจน์ cron หมายถึงการแปลงสัญกรณ์กระชับนี้ให้เป็นคำอธิบายที่อ่านได้ง่าย และรายการเวลาดำเนินการที่จะเกิดขึ้นจริง

รูปแบบห้าช่องมาตรฐานใช้ใน crontab บน Linux และ macOS ในแพลตฟอร์ม CI/CD อย่าง GitHub Actions และ GitLab CI ในระบบกำหนดตารางงานบนคลาวด์ของ AWS (EventBridge) Google Cloud Scheduler และ Azure Functions รวมถึงในไลบรารีจัดตารางงานของภาษาโปรแกรมสำคัญทุกภาษา บางระบบขยายรูปแบบเป็นหกหรือเจ็ดช่องโดยเพิ่มช่องวินาทีหรือช่องปี แต่เค้าโครงห้าช่องที่กำหนดโดย POSIX ยังคงเป็นพื้นฐานร่วมกันของทุกการนำไปใช้งาน

การวิเคราะห์นิพจน์ cron ด้วยตนเองมีแนวโน้มเกิดข้อผิดพลาดสูง การทำงานร่วมกันของแต่ละช่องสร้างตารางงานที่ไม่ชัดเจน เช่น 0 9 1-7 * 1 ไม่ได้หมายถึง 'ทุกวันจันทร์ในสัปดาห์แรก' แต่หมายถึง 'วันที่ 1 ถึง 7 ของทุกเดือน หรือ วันจันทร์ทุกวัน' เครื่องมือวิเคราะห์ cron ขจัดความคลุมเครือนี้โดยการขยายแต่ละช่อง ใช้กฎการรวมกัน และแสดงเวลาจริงที่งานจะทำงาน

เหตุใดจึงควรใช้ตัววิเคราะห์ Cron นี้?

การอ่านนิพจน์ cron เช่น 30 */6 1,15 * * จากไฟล์คอนฟิกและทราบว่ามันทำงานเมื่อใดนั้นต้องคำนวณจากห้าช่องในใจ เครื่องมือวิเคราะห์นี้ทำงานนั้นได้ทันที

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

กรณีการใช้งานตัววิเคราะห์ Cron

นักพัฒนา Frontend
ตรวจสอบนิพจน์ cron ในแดชบอร์ดผู้ดูแลระบบและ UI กำหนดตารางงานก่อนส่งไปยัง backend ยืนยันว่าตารางงานที่ผู้ใช้เลือกจาก dropdown ตรงกับสตริง cron ที่ฟอร์มสร้างขึ้น
วิศวกร Backend
แก้ปัญหางานตามตารางที่ทำงานในเวลาที่ไม่คาดคิด วางนิพจน์ cron จากคอนฟิก task queue (Celery, Sidekiq, Quartz) แล้วตรวจสอบว่าเวลาทำงานถัดไปตรงกับที่คาดไว้
DevOps / SRE
ตรวจสอบตารางงาน cron ใน CI/CD pipelines, Kubernetes CronJobs และคอนฟิก cloud scheduler ยืนยันว่างานสำรองข้อมูล การต่ออายุใบรับรอง และสคริปต์ทำความสะอาดถูกตั้งเวลาอย่างถูกต้องก่อนนำไปใช้งานจริง
วิศวกร QA
ตรวจสอบว่างานตามตารางในสภาพแวดล้อมทดสอบตรงกับตารางงาน production จับข้อผิดพลาด off-by-one ในช่องเดือนหรือวันในสัปดาห์ก่อนที่จะทำให้เกิดการข้ามการทำงานใน production
วิศวกรข้อมูล
ตรวจสอบ triggers ของ cron สำหรับ ETL pipelines และงานซิงค์ข้อมูล ยืนยันว่าช่วงเวลาดึงข้อมูลไม่ทับซ้อนกัน และ dependencies ปลายทางมีเวลาเตรียมตัวเพียงพอ
นักศึกษา / ผู้เรียน
เรียนรู้ไวยากรณ์ cron โดยทดลองใช้นิพจน์ต่าง ๆ และดูผลลัพธ์แบบเรียลไทม์ สร้างความเข้าใจว่า wildcards, ranges และ step values ทำงานร่วมกันอย่างไร

เอกสารอ้างอิงไวยากรณ์นิพจน์ Cron

นิพจน์ cron มาตรฐานมีห้าช่องคั่นด้วยช่องว่าง แต่ละช่องรับจำนวนเต็ม wildcards, ranges, lists และ step values ตารางด้านล่างแสดงช่วงที่อนุญาตและตัวดำเนินการสำหรับแต่ละช่อง

ช่องช่วงตัวดำเนินการคำอธิบาย
Minute0–59* , - /Minute within the hour
Hour0–23* , - /Hour of the day (24-hour)
Day (month)1–31* , - /Day of the month
Month1–12* , - /Month of the year (or JAN–DEC)
Day (week)0–6* , - /Day of the week (0 = Sunday, or SUN–SAT)

อักขระพิเศษสี่ตัวควบคุมวิธีที่ค่าถูกจับคู่ภายในแต่ละช่อง:

อักขระชื่อพฤติกรรม
*WildcardMatches every possible value in the field. * in the minute field means "every minute."
,ListSeparates individual values. 1,15 in the day field means "the 1st and 15th."
-RangeDefines an inclusive range. 1-5 in the day-of-week field means "Monday through Friday."
/StepDefines an interval. */10 in the minute field means "every 10 minutes." 5/15 means "5, 20, 35, 50."

นิพจน์ cron ทั่วไปที่ครอบคลุมความต้องการการกำหนดตารางงานส่วนใหญ่:

นิพจน์ตารางงาน
* * * * *Every minute
0 * * * *Every hour (at minute 0)
*/15 * * * *Every 15 minutes
0 9 * * *Every day at 9:00 AM
0 9 * * 1-5Weekdays at 9:00 AM
30 2 * * 0Every Sunday at 2:30 AM
0 0 1 * *First day of every month at midnight
0 0 * * 1Every Monday at midnight
0 0 1 1 *January 1st at midnight (yearly)
0 */6 * * *Every 6 hours
5,35 * * * *At minute 5 and 35 of every hour
0 9-17 * * 1-5Every hour from 9 AM to 5 PM, weekdays

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

วิธีวิเคราะห์นิพจน์ cron และคำนวณเวลาทำงานถัดไปในภาษาโปรแกรมยอดนิยม:

JavaScript (Node.js)
import cronstrue from 'cronstrue';

// Parse cron to human-readable text
cronstrue.toString('0 9 * * 1-5');
// → "At 09:00 AM, Monday through Friday"

cronstrue.toString('*/15 * * * *');
// → "Every 15 minutes"

// Validate with cron-parser and get next run times
import { parseExpression } from 'cron-parser';

const interval = parseExpression('30 2 * * 0');
console.log(interval.next().toISOString());
// → next Sunday at 02:30 UTC

// Iterate over the next 5 runs
for (let i = 0; i < 5; i++) {
  console.log(interval.next().toString());
}
Python
from crontab import CronTab
from croniter import croniter
from datetime import datetime

# Parse and describe a cron expression
cron = CronTab('0 9 * * 1-5')
print(cron.next(default_utc=True))
# → seconds until next run

# Get the next 5 run times with croniter
base = datetime.now()
cron_iter = croniter('0 9 * * 1-5', base)
for _ in range(5):
    print(cron_iter.get_next(datetime))
# → next 5 weekday 09:00 timestamps

# Check if a specific time matches
print(croniter.match('*/15 * * * *', datetime(2026, 3, 25, 10, 30)))
# → True (minute 30 is divisible by 15)
Go
package main

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

func main() {
    // Parse a standard 5-field cron expression
    parser := cron.NewParser(cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow)
    schedule, err := parser.Parse("0 9 * * 1-5")
    if err != nil {
        panic(err)
    }

    // Calculate the next 5 run times
    now := time.Now()
    for i := 0; i < 5; i++ {
        now = schedule.Next(now)
        fmt.Println(now)
    }
    // → next 5 weekday 09:00 timestamps
}
Bash (crontab)
# List current user's cron jobs
crontab -l

# Edit cron jobs interactively
crontab -e

# Add a job: run backup.sh every day at 2:30 AM
# (append to crontab via pipe)
(crontab -l 2>/dev/null; echo "30 2 * * * /home/user/backup.sh") | crontab -

# Check syntax with a dry-run parse (requires cronie or busybox)
# The system will reject invalid expressions when saving

# View cron logs on systemd-based Linux
journalctl -u cron --since "1 hour ago"

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

ความแตกต่างระหว่างนิพจน์ cron แบบ 5 ช่องและ 6 ช่องคืออะไร?
รูปแบบ cron มาตรฐาน (POSIX) มี 5 ช่อง ได้แก่ นาที ชั่วโมง วันในเดือน เดือน วันในสัปดาห์ เครื่องมือบางอย่างเช่น Quartz Scheduler และ Spring เพิ่มช่องวินาทีที่จุดเริ่มต้น ทำให้เป็น 6 ช่อง AWS EventBridge ใช้ 6 ช่องโดยเพิ่มช่องปีที่ท้าย ตัววิเคราะห์นี้รองรับรูปแบบ 5 ช่องมาตรฐาน ซึ่งเข้ากันได้กับ crontab, GitHub Actions, Kubernetes CronJobs และไลบรารีกำหนดตารางงานส่วนใหญ่
Cron จัดการช่องวันในเดือนและวันในสัปดาห์ร่วมกันอย่างไร?
เมื่อทั้งสองช่องถูกระบุ (ไม่ใช่ *) cron จะใช้ตรรกะ OR: งานทำงานเมื่อเงื่อนไขใดเงื่อนไขหนึ่งเป็นจริง เช่น 0 9 15 * 1 หมายถึง 'เวลา 9:00 น. ในวันที่ 15 ของทุกเดือน หรือ ทุกวันจันทร์' นี่เป็นแหล่งความสับสนที่พบบ่อย หากทั้งสองช่องถูกตั้งเป็น * งานจะทำงานทุกวัน
Cron ใช้ timezone ใด?
crontab แบบดั้งเดิมทำงานใน timezone ท้องถิ่นของระบบ Kubernetes CronJobs ใช้ timezone ของ kube-controller-manager (โดยปกติคือ UTC) เป็นค่าเริ่มต้น แต่รองรับฟิลด์ .spec.timeZone ตั้งแต่ Kubernetes 1.25 AWS EventBridge และ Google Cloud Scheduler ให้คุณระบุ timezone ต่อตารางงาน ตรวจสอบเสมอว่า scheduler ของคุณใช้ timezone ใดก่อนนำ cron job ไปใช้งานจริง
Cron สามารถรันงานทุก 30 วินาทีได้ไหม?
Cron แบบ 5 ช่องมาตรฐานไม่รองรับการกำหนดตารางงานย่อยกว่านาที ช่วงเวลาน้อยที่สุดคือหนึ่งนาที (*/1 หรือ *) หากต้องการรันทุก 30 วินาที คุณต้องใช้ cron แบบ 6 ช่องที่มีช่องวินาที (Quartz, Spring) สคริปต์ wrapper ที่หยุดรอ 30 วินาทีแล้วรันอีกครั้ง หรือกลไกกำหนดตารางงานอื่น เช่น systemd timers ที่ใช้ OnCalendar
0 และ 7 มีความหมายเหมือนกันสำหรับช่องวันในสัปดาห์หรือไม่?
ในการนำ cron ไปใช้งานส่วนใหญ่ ทั้ง 0 และ 7 แทนวันอาทิตย์ ข้อตกลงนี้มาจาก Unix cron ดั้งเดิม อย่างไรก็ตาม บางระบบ (Quartz) ใช้ 1 สำหรับวันอาทิตย์และ 7 สำหรับวันเสาร์ POSIX กำหนดช่วงเป็น 0-6 โดย 0 = วันอาทิตย์ หาก scheduler ของคุณรับชื่อวัน (SUN, MON) ให้ใช้ชื่อเหล่านั้นเพื่อหลีกเลี่ยงความคลุมเครือ
จะเกิดอะไรขึ้นถ้าฉันตั้งวันในเดือนที่ไม่มีอยู่จริง?
หากคุณกำหนดตารางงานสำหรับวันที่ 31 (0 0 31 * *) งานจะไม่ทำงานในเดือนที่มีน้อยกว่า 31 วัน Cron ไม่ดำเนินการต่อไปยังเดือนถัดไป เดือนกุมภาพันธ์จะถูกข้ามเสมอ รวมถึงเมษายน มิถุนายน กันยายน และพฤศจิกายน หากต้องการรันในวันสุดท้ายของทุกเดือน การนำ cron บางส่วนรองรับ modifier L (0 0 L * *) แต่ POSIX cron มาตรฐานไม่รองรับ
จะทดสอบนิพจน์ cron ก่อนนำไปใช้งานจริงได้อย่างไร?
ใช้ตัววิเคราะห์ออนไลน์เช่นนี้เพื่อดูเวลาทำงานถัดไปและยืนยันว่าตารางงานตรงกับความตั้งใจ สำหรับการตรวจสอบใน production ไลบรารี cron ส่วนใหญ่มีฟังก์ชันคำนวณการทำงานครั้งถัดไป: cron-parser ใน Node.js, croniter ใน Python, robfig/cron ใน Go รันนิพจน์ผ่านฟังก์ชันเหล่านี้ใน test suite เพื่อยืนยันเวลาดำเนินการ N ครั้งถัดไปก่อนนำไปใช้งานจริง