Cron 表达式生成器
使用分步构建器可视化生成 cron 表达式
快速预设
分钟
小时
月份中的日期
月份
星期几
Cron 表达式
0 9 * * *minute hour day(month) month day(week)
什么是 Cron 表达式生成器?
Cron 表达式生成器是一种通过可视化界面构建 cron 计划字符串的工具,无需手动编写。Cron 表达式由五个字段组成(分钟、小时、月份中的日期、月份、星期几),用于定义周期性任务的执行时间。该格式最早可追溯至 1979 年 Unix 原始 cron 守护进程,现广泛应用于 crontab、Kubernetes CronJob、GitHub Actions、AWS EventBridge、Google Cloud Scheduler 以及数十种任务调度库。
凭记忆编写 cron 表达式是常见的错误来源。五个字段之间存在不直观的交互:分钟字段中的步长值 */15 会在 0、15、30、45 分钟触发,而 5/15 则从第 5 分钟开始,依次在 5、20、35、50 分钟触发。将月份中的日期和星期几同时设为非通配符时,二者之间是 OR 关系而非 AND 关系,即使经验丰富的工程师也常因此感到困惑。可视化生成器通过让您直接选择所需计划并自动生成正确语法,消除了这种歧义。
Cron 生成器与 cron 解析器的功能相反。解析器接受已有的表达式并用自然语言解释其含义;生成器则反向工作:您描述所需的计划,工具输出对应的 cron 字符串。创建新的定时任务时使用生成器,审查或调试已有任务时使用解析器。
为什么使用这个 Cron 生成器?
手动编写 cron 表达式需要记忆字段顺序、取值范围和运算符规则。一个字段写错位置,就能把每天运行一次的任务变成每分钟运行一次。本生成器让您通过可视化界面选择计划,一键复制结果。
Cron 生成器使用场景
常用 Cron 计划预设
下表列出了最常用计划的 cron 表达式。大多数生产任务都属于其中某种模式。根据实际时间需求修改各字段即可。
| 计划 | 表达式 | 典型用途 |
|---|---|---|
| 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 |
Cron 表达式构建要素
每个 cron 表达式恰好有五个字段,从左到右依次读取。每个字段接受特定的取值和运算符。掌握这些规则,足以编写生产中遇到的任何计划。
四个运算符控制每个字段中值的匹配方式。可以组合使用:星期几字段中的 1-5/2 表示周一、周三、周五(范围 1-5,步长为 2)。
| 运算符 | 语法 | 示例 | 结果 |
|---|---|---|---|
| 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 |
代码示例
如何在 Node.js、Python、Go 和 bash 中创建并注册 cron 计划:
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