cron
是一种用于配置定时任务的表达式格式,常见于 Linux 的 crontab
、Kubernetes CronJob、Spring Scheduler 等场景。其基本结构由 5个时间字段(或 6个字段,含秒)组成,每个字段表示不同的时间单位。
1. 标准 cron 表达式(5字段)
* * * * * <command>
│ │ │ │ │
│ │ │ │ └─── 星期几 (0-7, 0和7均代表周日)
│ │ │ └───── 月份 (1-12)
│ │ └─────── 日 (1-31)
│ └───────── 小时 (0-23)
└─────────── 分钟 (0-59)
常用示例
表达式 | 说明 |
---|---|
*/5 * * * * |
每5分钟执行一次 |
0 */2 * * * |
每2小时的整点执行(如2:00,4:00) |
30 3 * * * |
每天凌晨3:30执行 |
0 0 */3 * * |
每3天的午夜执行 |
0 12 * * MON |
每周一中午12点执行 |
2. cron扩展格式(6字段,含秒)
某些系统(如 Spring、Quartz)支持更精确的秒级控制:
<秒> <分> <时> <日> <月> <周>
示例
0/10 * * ? * MON-FRI # Spring中:工作日的每10秒执行一次
3. crontab文件示例
Linux /etc/crontab
或用户级 crontab -e
:
# Sync logs every day at midnight
0 0 * * * /usr/bin/sync_logs.sh
# Backup database every Sunday at 3:15 AM
15 3 */7 root /usr/bin/backup_db.sh
4. Kubernetes CronJob
在 K8s YAML中定义:
apiVersion: batch/v1
kind: CronJob
metadata:
name: my-job
spec:
schedule: "*/5 */1 */1 */1" # ⚠️实际需符合标准5字段格式!
jobTemplate:
spec:
template:
containers:
- name: task
image: alpine
command: ["echo", "Hello Cron"]
注意事项
- 时区问题:默认使用系统时区,可通过环境变量(如
TZ=Asia/Shanghai
)调整。 - 特殊字符:
*
:任意值
,
:多个值(如MON,WED,FRI
)
-
:范围(如9-17
)
/
:间隔(如*/10
)
- 冲突处理:若“日”和“周”同时指定,可能触发两次任务(建议明确指定一个)。
如果需要验证表达式,可使用在线工具:Cron Expression Generator
内容由零声教学AI助手提供,问题来源于学员提问