Cron表达式解析器和构建器 - Crontab Guru替代工具
可视化解析、说明和构建Cron表达式。查看下次执行时间,获取人类可读描述,在线验证crontab语法。
常见问题
什么是Cron表达式?
Cron表达式是由5-7个字段组成的字符串,用于表示任务执行的调度计划。最初用于Unix类系统中的cron作业调度,现在这种语法已广泛用于云服务(AWS、Azure、GCP)、CI/CD流水线和应用程序框架。每个字段指定任务应在何时运行:分钟、小时、月中日期、月份和星期几。
如何使用这个Cron解析器工具?
在输入框中输入您的cron表达式(例如:0 9 * * 1-5)。工具会立即解析并显示人类可读的描述和下一次计划执行时间。使用预设下拉菜单可快速选择常见调度。切换到“构建”标签页,通过为每个字段选择值来可视化地创建表达式。
我的Cron表达式数据安全吗?
是的。您的cron表达式100%安全,永远不会离开您的浏览器。所有解析和计算都使用JavaScript在客户端执行。没有任何数据传输到服务器,因此您可以安全地测试任何调度模式。
标准cron格式和扩展cron格式有什么区别?
标准Unix cron使用5个字段:分钟、小时、月中日期、月份和星期几。扩展格式在开头添加了秒字段,总共有6个字段。某些系统如Quartz(Java)使用7字段格式,还包括年份。本工具同时支持标准5字段和扩展6字段格式。
为什么有两个日期字段(月中日期和星期几)?
您可以指定其中一个或两个都指定。当两个字段都指定了非通配符值时,任务会在任一条件满足时执行(而非两者都满足)。例如,'0 9 15 * 1'表示'每月15日上午9点或每周一上午9点' — 而不是'15日且为周一时的上午9点'。
如何创建“每5分钟”的cron表达式?
使用 */5 * * * *。/5表示“每第5个值”。类似地,*/15 * * * * 每15分钟执行一次,0 */2 * * * 每2小时在第0分钟执行一次。
Cron使用哪个时区?
默认情况下,cron使用系统的本地时区。在云服务中,通常可以指定时区。本工具以您浏览器的本地时区显示下一次执行时间。
代码示例
// Simple cron expression parser
function parseCronExpression(expression) {
const parts = expression.trim().split(/\s+/);
if (parts.length !== 5) {
throw new Error('Invalid cron expression: expected 5 fields');
}
const [minute, hour, dayOfMonth, month, dayOfWeek] = parts;
function parseField(field, min, max) {
if (field === '*') {
return Array.from({ length: max - min + 1 }, (_, i) => min + i);
}
const values = new Set();
field.split(',').forEach(part => {
if (part.includes('/')) {
const [range, step] = part.split('/');
const stepNum = parseInt(step, 10);
let start = min, end = max;
if (range !== '*' && range.includes('-')) {
[start, end] = range.split('-').map(Number);
}
for (let i = start; i <= end; i += stepNum) values.add(i);
} else if (part.includes('-')) {
const [start, end] = part.split('-').map(Number);
for (let i = start; i <= end; i++) values.add(i);
} else {
values.add(parseInt(part, 10));
}
});
return Array.from(values).sort((a, b) => a - b);
}
return {
minute: parseField(minute, 0, 59),
hour: parseField(hour, 0, 23),
dayOfMonth: parseField(dayOfMonth, 1, 31),
month: parseField(month, 1, 12),
dayOfWeek: parseField(dayOfWeek, 0, 6),
};
}
// Example usage
const expr = '0 9 * * 1-5';
console.log('Parsed:', parseCronExpression(expr));