Trình tạo biểu thức Cron

Tạo biểu thức cron một cách trực quan bằng trình tạo từng bước

Cài đặt sẵn nhanh

Phút

Giờ

Ngày trong tháng

Tháng

Ngày trong tuần

Biểu thức cron

0 9 * * *

minute hour day(month) month day(week)

Trình Tạo Biểu Thức Cron Là Gì?

Trình tạo biểu thức cron là công cụ xây dựng chuỗi lịch cron thông qua giao diện trực quan, thay vì yêu cầu bạn phải viết tay. Biểu thức cron là chuỗi gồm năm trường (phút, giờ, ngày trong tháng, tháng, ngày trong tuần) xác định thời điểm một tác vụ định kỳ sẽ chạy. Định dạng này bắt nguồn từ Unix cron daemon năm 1979 và hiện được sử dụng rộng rãi trong crontab, Kubernetes CronJobs, GitHub Actions, AWS EventBridge, Google Cloud Scheduler và hàng chục thư viện lập lịch tác vụ.

Viết biểu thức cron từ trí nhớ là nguồn gốc phổ biến của lỗi. Năm trường tương tác với nhau theo những cách không trực quan: giá trị bước như */15 trong trường phút tạo ra các lần chạy tại 0, 15, 30 và 45, trong khi 5/15 bắt đầu từ phút 5 và cho ra 5, 20, 35, 50. Kết hợp ngày-trong-tháng và ngày-trong-tuần với các giá trị không phải ký tự đại diện tạo ra điều kiện HOẶC, không phải VÀ — điều này thường gây bất ngờ ngay cả với các kỹ sư có kinh nghiệm. Trình tạo trực quan loại bỏ sự nhập nhằng này bằng cách để bạn chọn lịch mong muốn và tự động tạo ra cú pháp đúng.

Trình tạo cron khác với trình phân tích cron. Trình phân tích nhận một biểu thức có sẵn và giải thích nó bằng ngôn ngữ thông thường. Trình tạo hoạt động theo chiều ngược lại: bạn mô tả lịch cần thiết và công cụ xuất ra chuỗi cron tương ứng. Dùng trình tạo khi tạo tác vụ theo lịch mới; dùng trình phân tích khi kiểm tra hoặc gỡ lỗi các tác vụ hiện có.

Tại Sao Dùng Trình Tạo Cron Này?

Xây dựng biểu thức cron bằng tay nghĩa là phải ghi nhớ thứ tự trường, phạm vi giá trị và quy tắc toán tử. Chỉ một trường đặt sai vị trí có thể biến tác vụ hàng ngày thành tác vụ chạy mỗi phút. Trình tạo này cho phép bạn chọn lịch trực quan và sao chép kết quả chỉ bằng một cú nhấp chuột.

🖱️
Trình Xây Dựng Lịch Trực Quan
Chọn các giá trị phút, giờ, ngày, tháng và ngày trong tuần từ menu thả xuống và nút bật tắt. Biểu thức cron cập nhật theo thời gian thực khi bạn thay đổi từng trường. Không cần ghi nhớ cú pháp.
🔒
Xử Lý Ưu Tiên Quyền Riêng Tư
Toàn bộ quá trình tạo chạy trong trình duyệt của bạn. Không có dữ liệu lịch nào được gửi lên máy chủ. Biểu thức cron và cấu hình tác vụ của bạn luôn ở trên thiết bị.
Kết Quả Tức Thì với Xem Trước
Xem biểu thức cron được tạo và bản xem trước các lần chạy theo lịch tiếp theo trong khi bạn xây dựng. Xác minh lịch chính xác trước khi sao chép vào cấu hình.
📋
Không Cần Tài Khoản
Mở trang và bắt đầu xây dựng. 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, kể cả di động.

Các Trường Hợp Sử Dụng Trình Tạo Cron

Lập Trình Viên Frontend
Xây dựng biểu thức cron cho bảng quản trị và giao diện lập lịch. Tạo cú pháp đúng cho các bộ chọn lịch hướng tới người dùng lưu trữ chuỗi cron trong cơ sở dữ liệu.
Kỹ Sư Backend
Tạo biểu thức cron cho hàng đợi tác vụ như Celery, Sidekiq và Bull. Tạo chuỗi lịch, xác minh các lần chạy tiếp theo và dán vào cấu hình tác vụ của bạn.
DevOps / SRE
Tạo lịch cron cho Kubernetes CronJobs, pipeline CI/CD và tự động hóa hạ tầng. Xây dựng biểu thức cho cửa sổ sao lưu, gia hạn chứng chỉ và xoay vòng log mà không mắc lỗi cú pháp.
Kỹ Sư QA
Tạo biểu thức cron thử nghiệm kích hoạt tại các khoảng thời gian cụ thể cho kiểm thử tích hợp. Tạo lịch có thời gian chạy dự đoán được để xác thực hành vi của bộ lập lịch.
Kỹ Sư Dữ Liệu
Xây dựng biểu thức cron cho các trigger pipeline ETL và lịch đồng bộ dữ liệu. Tạo lịch không chồng chéo cho các giai đoạn trích xuất, chuyển đổi và tải với thời gian chính xác.
Sinh Viên / Người Học
Học cú pháp cron bằng cách thử nghiệm với trình xây dựng trực quan. Thay đổi từng trường và xem biểu thức cùng thời gian chạy tiếp theo thay đổi như thế nào. Xây dựng trực giác về ký tự đại diện, phạm vi và giá trị bước.

Cài Đặt Sẵn Lịch Cron Phổ Biến

Bảng dưới đây liệt kê các biểu thức cron cho các lịch được sử dụng thường xuyên nhất. Hầu hết các tác vụ production đều thuộc một trong các mẫu này. Chỉnh sửa từng trường riêng lẻ để phù hợp với thời gian thực tế của bạn.

LịchBiểu thứcTrường hợp sử dụng điển hình
Every minute* * * * *Health checks, queue polling
Every 5 minutes*/5 * * * *Metrics collection, cache refresh
Every 15 minutes*/15 * * * *API sync, dashboard updates
Every hour0 * * * *Log rotation, report generation
Every 6 hours0 */6 * * *Database backups, digest emails
Daily at midnight0 0 * * *Nightly batch jobs, cleanup scripts
Daily at 9 AM0 9 * * *Daily reports, notification digests
Weekdays at 9 AM0 9 * * 1-5Business-hours tasks, standup reminders
Every Monday at midnight0 0 * * 1Weekly reports, dependency updates
First of every month0 0 1 * *Billing runs, monthly aggregation
Every Sunday at 2:30 AM30 2 * * 0Full backups during low-traffic window
January 1st at midnight0 0 1 1 *Annual reports, license renewals

Các Thành Phần Cơ Bản Của Biểu Thức Cron

Mỗi biểu thức cron có đúng năm trường, đọc từ trái sang phải. Mỗi trường chấp nhận các giá trị và toán tử cụ thể. Nắm rõ các quy tắc này là đủ để viết bất kỳ lịch nào bạn gặp trong môi trường production.

Bố cục biểu thức cron năm trường:
*min0-59
*hour0-23
*day1-31
*month1-12
*weekday0-6

Bốn toán tử kiểm soát cách so khớp giá trị trong từng trường. Bạn có thể kết hợp chúng: 1-5/2 trong trường ngày-trong-tuần có nghĩa là Thứ Hai, Thứ Tư, Thứ Sáu (phạm vi 1-5, bước 2).

Toán tửCú phápVí dụKết quả
Wildcard** (minute)Every minute
Lista,b,c1,15 (day)1st and 15th
Rangea-b9-17 (hour)9 AM through 5 PM
Step*/n*/10 (minute)Every 10 minutes
Range+Stepa-b/n10-30/5 (min)10, 15, 20, 25, 30

Ví Dụ Code

Cách tạo và đăng ký lịch cron trong Node.js, Python, Go và bash:

JavaScript (Node.js)
import { CronJob } from 'cron';

// Build a cron expression: every weekday at 9:00 AM
const expression = '0 9 * * 1-5';

const job = new CronJob(expression, () => {
  console.log('Running weekday morning task');
});
job.start();

// Programmatic expression building
function buildCron({ minute = '*', hour = '*', dom = '*', month = '*', dow = '*' }) {
  return `${minute} ${hour} ${dom} ${month} ${dow}`;
}

const expr = buildCron({ minute: '0', hour: '*/6', dow: '1-5' });
console.log(expr); // → "0 */6 * * 1-5"
Python
from crontab import CronTab

# Create a new cron job for the current user
cron = CronTab(user=True)

# Build a job: run backup.py every day at 2:30 AM
job = cron.new(command='python3 /home/user/backup.py')
job.setall('30 2 * * *')

print(job)           # → 30 2 * * * python3 /home/user/backup.py
print(job.is_valid()) # → True

# Schedule every 15 minutes on weekdays
job2 = cron.new(command='/usr/bin/sync-data')
job2.minute.every(15)
job2.dow.during('MON', 'FRI')

cron.write()  # Save to user's crontab

# Verify next run time
from croniter import croniter
from datetime import datetime

it = croniter('30 2 * * *', datetime.now())
print(it.get_next(datetime))  # → next 2:30 AM timestamp
Go
package main

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

// BuildCron constructs a 5-field cron expression from parts
func BuildCron(minute, hour, dom, month, dow string) string {
    fields := []string{minute, hour, dom, month, dow}
    return strings.Join(fields, " ")
}

func main() {
    // Generate: every weekday at 9 AM
    expr := BuildCron("0", "9", "*", "*", "1-5")
    fmt.Println(expr) // → 0 9 * * 1-5

    // Validate and schedule it
    c := cron.New()
    _, err := c.AddFunc(expr, func() {
        fmt.Println("Running scheduled task")
    })
    if err != nil {
        fmt.Printf("Invalid expression: %v\n", err)
        return
    }
    c.Start()
}
Bash (crontab)
# Open the crontab editor to add a new job
crontab -e

# Add a cron job without opening an editor:
# Run cleanup.sh every Sunday at 3 AM
(crontab -l 2>/dev/null; echo "0 3 * * 0 /home/user/cleanup.sh") | crontab -

# Generate and add a job: every 10 minutes, log disk usage
EXPR="*/10 * * * *"
CMD="df -h >> /var/log/disk-usage.log"
(crontab -l 2>/dev/null; echo "$EXPR $CMD") | crontab -

# Verify the job was added
crontab -l | tail -1
# → */10 * * * * df -h >> /var/log/disk-usage.log

# Remove all cron jobs (use with caution)
# crontab -r

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

Thứ tự trường đúng trong biểu thức cron là gì?
Thứ tự tiêu chuẩn năm trường là: phút (0-59), giờ (0-23), ngày trong tháng (1-31), tháng (1-12), ngày trong tuần (0-6, trong đó 0 là Chủ nhật). Thứ tự này được định nghĩa bởi POSIX và được sử dụng bởi crontab, Kubernetes, GitHub Actions và hầu hết các thư viện cron. Một số công cụ như Quartz Scheduler thêm trường giây ở đầu, tạo thành sáu trường, nhưng bố cục năm trường là mặc định phổ quát.
Làm thế nào để tạo biểu thức cron cho 'mỗi N phút'?
Dùng toán tử bước trong trường phút: */N. Để chạy mỗi 5 phút, viết */5 * * * *. Để chạy mỗi 15 phút, viết */15 * * * *. Toán tử bước chia đều phạm vi của trường. Lưu ý rằng */7 không tạo ra các lần chạy mỗi 7 phút xuyên ranh giới giờ; nó tạo ra các lần chạy tại phút 0, 7, 14, 21, 28, 35, 42, 49, 56, sau đó đặt lại về 0 tại giờ tiếp theo.
Tôi có thể tạo biểu thức cron chạy vào ngày cuối cùng của mỗi tháng không?
Cron POSIX tiêu chuẩn không có toán tử 'ngày cuối tháng'. Bạn không thể viết 0 0 L * * trong crontab hay Kubernetes CronJobs. Các giải pháp thay thế bao gồm lập lịch cho ngày 28-31 và thêm kiểm tra shell ([ $(date +%d -d tomorrow) -eq 01 ]), hoặc dùng triển khai cron mở rộng như Quartz hỗ trợ ký hiệu L. AWS EventBridge cũng có thể nhắm vào ngày cuối tháng một cách tự nhiên.
Sự khác biệt giữa trình tạo cron và trình phân tích cron là gì?
Trình tạo cron nhận yêu cầu lập lịch của bạn (ví dụ: 'mỗi ngày thường lúc 9 giờ sáng') và xuất ra biểu thức cron đúng (0 9 * * 1-5). Trình phân tích cron hoạt động ngược lại: nhận biểu thức có sẵn và tạo ra mô tả dễ đọc. Dùng trình tạo khi tạo lịch mới. Dùng trình phân tích khi xem xét hoặc gỡ lỗi lịch hiện có.
Làm thế nào để tránh các tác vụ cron chồng chéo nhau?
Bản thân cron không ngăn các lần chạy chồng chéo. Nếu một tác vụ lập lịch mỗi phút mất 90 giây, hai phiên bản sẽ chồng chéo. Để ngăn điều này, dùng tệp khóa (flock trong bash), khóa phân tán (Redis, etcd) hoặc chính sách đồng thời tích hợp của bộ lập lịch. Kubernetes CronJobs có trường concurrencyPolicy có thể đặt là Forbid hoặc Replace. Trong các bộ lập lịch cấp ứng dụng như Celery, dùng solo pool hoặc khóa cấp tác vụ.
Trong cron, 0 hay 1 là ngày đầu tiên trong tuần?
Trong cron POSIX, 0 là Chủ nhật và 6 là Thứ Bảy. Cả 0 và 7 đều đại diện cho Chủ nhật trong hầu hết các triển khai. Quartz Scheduler dùng quy ước khác với 1 là Chủ nhật và 7 là Thứ Bảy. Nếu hệ thống hỗ trợ tên ngày (SUN, MON, TUE), hãy dùng chúng thay vì số để tránh nhầm lẫn giữa các nền tảng.
Làm thế nào để tạo biểu thức cron cho múi giờ cụ thể?
crontab truyền thống sử dụng múi giờ cục bộ của hệ thống. Bạn có thể đặt biến TZ trong tệp crontab (TZ=America/New_York) trên một số hệ thống. Kubernetes CronJobs hỗ trợ trường .spec.timeZone từ phiên bản 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 ghi lại múi giờ dự kiến cùng với biểu thức cron trong cấu hình của bạn.