Trình Phân Tích Biểu Thức Cron

Phân tích biểu thức cron thành mô tả dễ đọc và xem trước các lần chạy tiếp theo

Thử ví dụ

Biểu thức cron

minute hour day(month) month day(week)

Mô tả dễ đọc

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

Phân tích từng trường

Minute

0

0–59

Hour

9

0–23

Day (month)

*

1–31

Month

*

1–12

Day (week)

1-5

0–6

10 lần chạy tiếp theo

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

Phân Tích Biểu Thức Cron Là Gì?

Biểu thức cron là một chuỗi gồm năm trường cách nhau bằng dấu cách, dùng để định nghĩa lịch chạy định kỳ. Định dạng này bắt nguồn từ Unix cron daemon, lần đầu được viết bởi Ken Thompson cho Version 7 Unix vào năm 1979. Mỗi trường đại diện cho một đơn vị thời gian: phút, giờ, ngày trong tháng, tháng và ngày trong tuần. Phân tích biểu thức cron nghĩa là chuyển đổi ký hiệu rút gọn này thành mô tả dễ đọc và danh sách cụ thể các thời điểm thực thi sắp tới.

Định dạng năm trường tiêu chuẩn được sử dụng bởi crontab trên Linux và macOS, bởi các nền tảng CI/CD như GitHub Actions và GitLab CI, bởi các bộ lập lịch đám mây trong AWS (EventBridge), Google Cloud Scheduler và Azure Functions, và bởi các thư viện lập lịch tác vụ trong mọi ngôn ngữ lập trình phổ biến. Một số hệ thống mở rộng định dạng lên sáu hoặc bảy trường bằng cách thêm trường giây hoặc trường năm, nhưng bố cục năm trường theo POSIX vẫn là nền tảng chung mà tất cả các triển khai đều chia sẻ.

Phân tích biểu thức cron bằng tay rất dễ mắc lỗi. Sự tương tác giữa các trường tạo ra các lịch không trực quan: 0 9 1-7 * 1 không có nghĩa là 'mỗi thứ Hai trong tuần đầu tiên' mà là 'từ ngày 1 đến ngày 7 hàng tháng HOẶC bất kỳ ngày thứ Hai nào.' Một trình phân tích cron loại bỏ sự nhập nhằng này bằng cách khai triển từng trường, áp dụng các quy tắc kết hợp và tạo ra các mốc thời gian thực tế khi tác vụ sẽ được kích hoạt.

Tại Sao Dùng Trình Phân Tích Cron Này?

Đọc biểu thức cron như 30 */6 1,15 * * từ tệp cấu hình và biết chính xác thời điểm nó chạy đòi hỏi phải tính toán qua năm trường. Trình phân tích này thực hiện công việc đó ngay lập tức.

Phân Tích Tức Thì
Gõ hoặc dán biểu thức cron và xem ngay mô tả dễ đọc cùng 10 lần chạy theo lịch tiếp theo. Không cần nút gửi, không cần tải lại trang.
🔒
Xử Lý Ưu Tiên Quyền Riêng Tư
Toàn bộ quá trình phân tích chạy cục bộ trên trình duyệt của bạn. Biểu thức cron và dữ liệu lịch của bạn không bao giờ rời khỏi thiết bị.
📋
Phân Tích Từng Trường
Mỗi trong số năm trường được phân tích và hiển thị riêng lẻ, cho thấy các giá trị đã được giải mã. Xác định ngay trường nào kiểm soát lịch chạy.
🔄
Không Cần Tài Khoản
Mở trang và bắt đầu phân tích. Không cần đăng nhập, không cần API key, không cần cài đặt. Hoạt động trên mọi thiết bị có trình duyệt hiện đại.

Các Trường Hợp Sử Dụng Trình Phân Tích Cron

Lập Trình Viên Frontend
Xác minh biểu thức cron trong các bảng quản trị và giao diện lập lịch trước khi gửi chúng lên backend. Kiểm tra xem lịch mà người dùng chọn trong danh sách có khớp với chuỗi cron được tạo bởi biểu mẫu hay không.
Kỹ Sư Backend
Gỡ lỗi các tác vụ theo lịch chạy vào thời điểm không mong đợi. Dán biểu thức cron từ cấu hình hàng đợi tác vụ của bạn (Celery, Sidekiq, Quartz) và kiểm tra xem các lần chạy tiếp theo có khớp với kỳ vọng không.
DevOps / SRE
Kiểm tra lịch cron trong các pipeline CI/CD, Kubernetes CronJobs và cấu hình bộ lập lịch đám mây. Xác minh rằng các tác vụ sao lưu, gia hạn chứng chỉ và dọn dẹp được đặt thời gian chính xác trước khi triển khai.
Kỹ Sư QA
Xác thực rằng các tác vụ theo lịch trong môi trường thử nghiệm khớp với lịch production. Phát hiện lỗi sai số một trong các trường tháng hoặc ngày trong tuần trước khi chúng gây ra bỏ lỡ lần chạy trên production.
Kỹ Sư Dữ Liệu
Kiểm tra các trigger cron cho các pipeline ETL và tác vụ đồng bộ dữ liệu. Đảm bảo rằng các cửa sổ trích xuất không chồng chéo và các phụ thuộc xuôi dòng có đủ thời gian chuẩn bị.
Sinh Viên / Người Học
Học cú pháp cron bằng cách thử nghiệm các biểu thức khác nhau và xem kết quả theo thời gian thực. Xây dựng trực giác về cách ký tự đại diện, phạm vi và giá trị bước tương tác với nhau.

Tài Liệu Tham Khảo Cú Pháp Biểu Thức Cron

Biểu thức cron tiêu chuẩn có năm trường cách nhau bằng dấu cách. Mỗi trường chấp nhận số nguyên, ký tự đại diện, phạm vi, danh sách và giá trị bước. Bảng dưới đây hiển thị phạm vi cho phép và toán tử cho từng trường.

TrườngPhạm viToán tửMô tả
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)

Bốn ký tự đặc biệt kiểm soát cách so khớp giá trị trong từng trường:

Ký tựTênHành vi
*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."

Dưới đây là các biểu thức cron phổ biến đáp ứng hầu hết các nhu cầu lập lịch:

Biểu thứcLịch
* * * * *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

Ví Dụ Code

Cách phân tích biểu thức cron và tính toán thời gian chạy tiếp theo trong các ngôn ngữ phổ biến:

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"

Câu Hỏi Thường Gặp

Sự khác biệt giữa biểu thức cron 5 trường và 6 trường là gì?
Định dạng cron tiêu chuẩn (POSIX) có 5 trường: phút, giờ, ngày trong tháng, tháng, ngày trong tuần. Một số công cụ như Quartz Scheduler và Spring thêm trường giây ở đầu, tạo thành 6 trường. AWS EventBridge dùng 6 trường với trường năm ở cuối. Trình phân tích này hỗ trợ định dạng 5 trường tiêu chuẩn, tương thích với crontab, GitHub Actions, Kubernetes CronJobs và hầu hết các thư viện lập lịch.
Cron xử lý ngày trong tháng và ngày trong tuần cùng nhau như thế nào?
Khi cả hai trường đều bị giới hạn (không phải *), cron sử dụng logic HOẶC: tác vụ chạy khi một trong hai điều kiện đúng. Ví dụ, 0 9 15 * 1 có nghĩa là 'lúc 9:00 sáng vào ngày 15 hàng tháng HOẶC vào mỗi thứ Hai.' Đây là nguồn gây nhầm lẫn phổ biến. Nếu cả hai trường đều được đặt thành *, tác vụ chạy mỗi ngày.
Cron sử dụng múi giờ nào?
crontab truyền thống chạy theo múi giờ cục bộ của hệ thống. Kubernetes CronJobs mặc định theo múi giờ của kube-controller-manager (thường là UTC) nhưng hỗ trợ trường .spec.timeZone tùy chọn từ Kubernetes 1.25. AWS EventBridge và Google Cloud Scheduler cho phép bạn chỉ định múi giờ cho từng lịch. Luôn kiểm tra múi giờ mà bộ lập lịch của bạn sử dụng trước khi triển khai tác vụ cron.
Cron có thể chạy tác vụ mỗi 30 giây không?
Cron 5 trường tiêu chuẩn không hỗ trợ lập lịch dưới một phút. Khoảng thời gian nhỏ nhất là một phút (*/1 hoặc *). Để chạy thứ gì đó mỗi 30 giây, bạn cần cron 6 trường với trường giây (Quartz, Spring), một script bọc ngoài sleep 30 giây rồi chạy lại, hoặc một cơ chế lập lịch khác như systemd timers với OnCalendar.
Giá trị 0 và 7 có giống nhau cho trường ngày trong tuần không?
Trong hầu hết các triển khai cron, cả 0 và 7 đều đại diện cho Chủ nhật. Quy ước này xuất phát từ Unix cron ban đầu. Tuy nhiên, một số hệ thống (Quartz) dùng 1 cho Chủ nhật và 7 cho thứ Bảy. POSIX định nghĩa phạm vi là 0-6 với 0 = Chủ nhật. Nếu bộ lập lịch của bạn chấp nhận tên ngày (SUN, MON), hãy dùng chúng để tránh nhầm lẫn.
Điều gì xảy ra nếu tôi đặt ngày trong tháng không tồn tại?
Nếu bạn lập lịch tác vụ vào ngày 31 (0 0 31 * *), nó sẽ không chạy trong những tháng có ít hơn 31 ngày. Cron không chuyển sang tháng tiếp theo. Tháng Hai sẽ luôn bị bỏ qua, và tháng Tư, tháng Sáu, tháng Chín và tháng Mười Một cũng sẽ bị bỏ qua. Để chạy vào ngày cuối cùng của mỗi tháng, một số triển khai cron hỗ trợ ký hiệu L (0 0 L * *), nhưng POSIX cron tiêu chuẩn thì không.
Làm thế nào để kiểm tra biểu thức cron trước khi triển khai?
Dùng trình phân tích trực tuyến như công cụ này để xem các lần chạy tiếp theo và xác minh rằng lịch khớp với mục đích của bạn. Để xác thực trên production, hầu hết các thư viện cron cung cấp hàm tính toán lần chạy tiếp theo: cron-parser trong Node.js, croniter trong Python, robfig/cron trong Go. Chạy biểu thức qua một trong các công cụ này trong bộ kiểm thử của bạn để xác nhận N lần thực thi tiếp theo trước khi triển khai.