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.
Các Trường Hợp Sử Dụng Trình Tạo Cron
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ịch | Biểu thức | Trườ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 hour | 0 * * * * | Log rotation, report generation |
| Every 6 hours | 0 */6 * * * | Database backups, digest emails |
| Daily at midnight | 0 0 * * * | Nightly batch jobs, cleanup scripts |
| Daily at 9 AM | 0 9 * * * | Daily reports, notification digests |
| Weekdays at 9 AM | 0 9 * * 1-5 | Business-hours tasks, standup reminders |
| Every Monday at midnight | 0 0 * * 1 | Weekly reports, dependency updates |
| First of every month | 0 0 1 * * | Billing runs, monthly aggregation |
| Every Sunday at 2:30 AM | 30 2 * * 0 | Full backups during low-traffic window |
| January 1st at midnight | 0 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ố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áp | Ví dụ | Kết quả |
|---|---|---|---|
| Wildcard | * | * (minute) | Every minute |
| List | a,b,c | 1,15 (day) | 1st and 15th |
| Range | a-b | 9-17 (hour) | 9 AM through 5 PM |
| Step | */n | */10 (minute) | Every 10 minutes |
| Range+Step | a-b/n | 10-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:
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"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 timestamppackage 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()
}# 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