Cron 表达式解析器
解析Cron表达式,计算下次运行时间、最近运行时间,生成人类可读描述
🔒 数据本地处理,不上传服务器
Ad Space
什么是 Cron 表达式?
Cron表达式是一种用于定义定时任务执行时间的字符串格式,最早出现在Unix系统的cron守护进程中,如今已广泛应用于各类调度系统(如Linux crontab、Quartz、Airflow、Kubernetes CronJob等)。一个标准的Cron表达式由5个字段组成,分别表示分钟、小时、日期、月份、星期,通过特殊符号组合可以表达几乎任何时间规律。
Cron 表达式语法详解
标准Cron表达式包含5个字段,字段之间用空格分隔:
# 格式:分 时 日 月 周
# 示例:
*/5 * * * * # 每5分钟执行一次
0 9 * * 1-5 # 周一到周五早上9点执行
0 0 1 * * # 每月1号零点执行
30 2 * * 0 # 每周日凌晨2:30执行
0 */2 * * * # 每2小时执行一次
各字段取值范围
- 分钟 (Minute):0-59
- 小时 (Hour):0-23
- 日期 (Day of month):1-31
- 月份 (Month):1-12 或 JAN-DEC
- 星期 (Day of week):0-7(0和7都表示周日)或 SUN-SAT
特殊符号含义
- *:表示任意值,即该字段不限制
- ,:列举多个值,如 1,3,5 表示第1、3、5
- -:表示范围,如 1-5 表示1到5
- /:表示步长,如 */5 表示每5个单位
- ?:不指定(主要用于日期和星期互斥的场景,Quartz扩展)
- L:最后一天/最后一个工作日(Quartz扩展)
- W:最近的工作日(Quartz扩展)
- #:第几个星期几(Quartz扩展)
常见使用场景
场景一:系统运维任务
定期执行备份、日志清理、系统监控等运维任务。例如 0 2 * * * 表示每天凌晨2点执行数据库备份。
场景二:数据处理任务
定时执行数据同步、报表生成、ETL任务等。例如 0 8 * * 1 表示每周一早8点生成上周数据报表。
场景三:应用定时任务
Web应用中的定时任务,如定时发送邮件、清理过期会话、更新缓存等。
Cron 表达式注意事项
- 日期和星期字段是或的关系,当两者都指定了具体值时,满足任一条件即触发
- Cron基于服务器本地时区执行,跨时区部署时需注意时区配置
- 标准Cron最小粒度为分钟,如需秒级控制需使用Quartz等扩展格式(6-7个字段)
- Cron不支持年份和秒级控制,复杂调度建议使用专业调度框架
- 任务执行时间过长可能导致重叠执行,需考虑任务互斥和幂等性
常见问题
Cron表达式最小粒度是多少?▼
标准Cron表达式最小粒度是分钟级。如果需要秒级精度,可以使用Quartz框架的6字段或7字段扩展格式(增加秒和年字段)。
日期和星期同时指定时如何生效?▼
当日期和星期字段都指定了具体值(非*)时,两者是'或'的关系,满足任一条件就会触发。这是Cron的经典设计,使用时需特别注意。
Cron支持哪些特殊符号?▼
标准Cron支持*(任意)、,(列表)、-(范围)、/(步长)四种符号。Quartz等扩展格式还支持?、L、W、#等符号,功能更强大。
如何设置工作日(周一到周五)执行?▼
使用星期范围:0 9 * * 1-5 表示周一到周五每天早9点执行。其中1代表周一,5代表周五,范围用'-'连接。
Cron执行的时区是怎样的?▼
Cron任务按照服务器的本地时区执行。如果服务器时区不是你期望的时区,可以通过设置CRON_TZ环境变量(部分系统支持)或调整服务器时区来解决。
*/5和0/5有什么区别?▼
在分钟字段中,*/5和0/5效果相同,都表示从0开始每5分钟执行。但在其他字段可能不同,如小时字段*/2和0/2都表示从0点开始每2小时。*号本质上是起始点为字段最小值的简写。