Cron 表达式是 Unix/Linux 系统、云平台和 CI/CD 流水线中任务调度的基础。无论你需要每晚 3 点运行数据库备份、每周一发送报告,还是每 15 分钟触发一次构建流水线,cron 表达式都能提供精确的声明式控制。本全面指南涵盖从基础 5 字段语法到高级特殊字符、平台差异、时区处理、调试技术和安全注意事项的方方面面。
TL;DR
Cron 表达式是一种基于时间的调度字符串,包含 5 个字段(分钟、小时、日、月、星期)。扩展格式添加秒或年字段。使用 *、/、-、逗号等特殊字符实现灵活调度。Linux crontab、AWS EventBridge、GitHub Actions、Kubernetes CronJob 和 Vercel Cron 之间存在平台差异。生产环境中部署 cron 任务时,务必考虑时区、重叠防护和输出日志。
要点总结
- 标准 cron 使用 5 个字段;部分系统(Quartz、Spring、AWS)增加第 6 个字段(秒)或第 7 个字段(年)。
- 星号(*)表示"每个值",斜杠(/)定义步长间隔,破折号(-)定义范围,逗号(,)定义列表。
- 扩展实现(如 Quartz)中可使用 L、W 和 # 特殊字符,分别用于月末、工作日和第 N 个星期几的调度。
- GitHub Actions 和许多 CI/CD 平台仅在 UTC 时区运行 cron;请务必确认你的调度器使用的时区。
- 使用文件锁(flock)或咨询锁防止 cron 任务重叠执行。
- 将 stdout 和 stderr 重定向到日志文件,并为生产环境的 cron 任务设置监控告警。
什么是 Cron 表达式?
Cron 表达式是一种紧凑的、以空格分隔的字符串,用于告诉调度器精确的任务执行时间。"cron"一词源自希腊语"chronos"(时间)。cron 守护进程(crond)自 1970 年代起就是类 Unix 操作系统的核心组件,其表达式语法已成为基于时间调度的通用标准。
最广泛使用的格式是 5 字段表达式,每个字段代表一个时间单位。部分实现扩展为 6 或 7 个字段。
5 字段格式(标准 Cron)
Linux crontab、Kubernetes CronJob、GitHub Actions 和 Vercel Cron 使用的标准 cron 表达式:
┌───────────── 分钟 (0–59)
│ ┌─────────── 小时 (0–23)
│ │ ┌───────── 日期(月中第几天) (1–31)
│ │ │ ┌─────── 月份 (1–12)
│ │ │ │ ┌───── 星期(周中第几天) (0–7)
│ │ │ │ │
* * * * *6 字段格式(Quartz / Spring)
Java 调度器(如 Quartz、Spring @Scheduled 和 AWS CloudWatch Events)使用的格式:
┌─────────────── seconds (0–59)
│ ┌───────────── 分钟 (0–59)
│ │ ┌─────────── 小时 (0–23)
│ │ │ ┌───────── 日期(月中第几天) (1–31)
│ │ │ │ ┌─────── 月份 (1–12)
│ │ │ │ │ ┌───── 星期(周中第几天) (0–7)
│ │ │ │ │ │
* * * * * *逐字段详解
分钟
允许值:0 到 59。指定每小时中任务应运行的分钟。
0 → at the top of the hour
*/5 → every 5 minutes (0, 5, 10, 15, ...)
15,45 → at minute 15 and 45
10-20 → every minute from 10 through 20小时
允许值:0 到 23(24 小时制)。0 为午夜,12 为中午,23 为晚上 11 点。
0 → midnight
9 → 9 AM
9-17 → every hour from 9 AM to 5 PM
*/4 → every 4 hours (0, 4, 8, 12, 16, 20)日期(月中第几天)
允许值:1 到 31。注意 29、30、31 日并非所有月份都有。
1 → first day of month
15 → 15th of the month
1,15 → 1st and 15th
L → last day (Quartz only)月份
允许值:1 到 12(部分实现支持 JAN-DEC)。1 为一月,12 为十二月。
1 → January
*/3 → every 3 months (Jan, Apr, Jul, Oct)
6-8 → June through August
1,4,7,10 → quarterly (Jan, Apr, Jul, Oct)星期(周中第几天)
允许值:0 到 7(或 SUN-SAT)。0 和 7 都表示周日。1 为周一,6 为周六。
0 or 7 → Sunday
1 → Monday
1-5 → Monday through Friday (weekdays)
0,6 → Saturday and Sunday (weekend)
5#3 → 3rd Friday (Quartz only)特殊字符详解
星号(*)
匹配该字段的每个可能值。在分钟字段使用 * 表示"每一分钟"(0 到 59)。
* * * * * # every minute of every hour of every day斜杠(/)
定义步长值(增量)。分钟字段中的 */15 表示"每 15 分钟"(0、15、30、45)。也可与起始值组合:5/15 表示"从第 5 分钟开始每隔 15 分钟"(5、20、35、50)。
*/10 * * * * # every 10 minutes
5/15 * * * * # minutes 5, 20, 35, 50
0 */6 * * * # every 6 hours at minute 0破折号(-)
定义包含范围。小时字段中的 9-17 表示"上午 9 点到下午 5 点的每个小时"。星期字段中的 1-5 表示"周一到周五"。
0 9-17 * * * # hourly from 9 AM to 5 PM
0 0 * * 1-5 # midnight, Monday through Friday逗号(,)
指定离散值列表。日期字段中的 1,15 表示"每月 1 日和 15 日"。分钟字段中的 0,30 表示"第 0 分钟和第 30 分钟"。
0 0 1,15 * * # 1st and 15th at midnight
0 8,12,18 * * * # at 8 AM, noon, and 6 PML(Last,最后)
在 Quartz 和部分扩展实现中可用。在日期字段中,L 表示"当月最后一天"。在星期字段中,5L 表示"当月最后一个周五"。
# Quartz / Spring only:
0 0 L * ? # last day of every month at midnight
0 0 ? * 5L # last Friday of every month at midnightW(Weekday,工作日)
在 Quartz 和扩展实现中可用。日期字段中的 15W 表示"离 15 日最近的工作日(周一到周五)"。如果 15 日是周六,则任务在周五 14 日运行。
# Quartz only:
0 0 15W * ? # nearest weekday to the 15th at midnight
0 0 1W * ? # nearest weekday to the 1st at midnight井号(#)
在 Quartz 中可用。指定"当月第 N 个星期几"。星期字段中的 5#3 表示"每月第三个周五"。1#1 表示"每月第一个周一"。
# Quartz only:
0 10 ? * 5#3 # 3rd Friday at 10 AM
0 9 ? * 1#1 # 1st Monday at 9 AM
0 9 ? * 1#2 # 2nd Monday at 9 AM问号(?)
在 Quartz 和 AWS 中使用,表示日期或星期字段"无特定值"。当其中一个字段有具体值时,另一个必须使用 ?。
# AWS / Quartz:
0 10 ? * 2 # every Monday at 10 AM (? for day-of-month)
0 0 15 * ? # 15th of month at midnight (? for day-of-week)常用 Cron 模式与示例
| Expression | Description |
|---|---|
| * * * * * | Every minute |
| */5 * * * * | Every 5 minutes |
| */15 * * * * | Every 15 minutes |
| 0 * * * * | Every hour (at minute 0) |
| 0 0 * * * | Daily at midnight |
| 0 6 * * * | Daily at 6:00 AM |
| 30 8 * * 1-5 | Weekdays at 8:30 AM |
| 0 9 * * 1 | Every Monday at 9:00 AM |
| 0 0 * * 0 | Every Sunday at midnight |
| 0 0 1 * * | First day of every month (midnight) |
| 0 0 1 1 * | January 1st at midnight |
| 0 0 1 */3 * | Every 3 months (quarterly) |
| 0 12 * * 1-5 | Weekdays at noon |
| 0 0 * * 1,4 | Monday and Thursday at midnight |
| 0 8-17 * * 1-5 | Hourly from 8 AM to 5 PM, weekdays |
| 0 */2 * * * | Every 2 hours |
| 0 22 * * 5 | Every Friday at 10 PM |
| 0 0 15 * * | 15th of every month at midnight |
在线解析和测试你的 cron 表达式
打开 Cron 表达式解析器不同环境中的 Cron
Linux Crontab
经典 cron 实现。用 "crontab -e" 编辑,"crontab -l" 列出。使用 5 字段语法。默认使用系统时区。支持 MAILTO 发送输出邮件。
# Edit current user's crontab
crontab -e
# List current crontab entries
crontab -l
# Example: backup database daily at 3 AM
0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
# Set timezone (at top of crontab)
TZ=America/New_York
0 9 * * * /path/to/script.sh
# Send output via email
MAILTO=admin@example.com
0 6 * * 1 /path/to/weekly-report.shAWS EventBridge(CloudWatch Events)
AWS 使用 6 字段格式:分钟、小时、日期、月份、星期、年份。要求日期或星期其中一个使用 ?。默认仅支持 UTC(EventBridge Scheduler 支持时区)。也可用速率表达式:rate(5 minutes)。
# AWS EventBridge 6-field format:
# minute hour day-of-month month day-of-week year
# Every 5 minutes
cron(*/5 * * * ? *)
# Daily at 10 AM UTC
cron(0 10 * * ? *)
# First Monday of every month at 8 AM
cron(0 8 ? * 2#1 *)
# Rate expression alternative
rate(5 minutes)
rate(1 hour)
rate(7 days)GitHub Actions
在 schedule 触发器中使用标准 5 字段 POSIX cron 语法。仅在 UTC 运行。最小间隔为 5 分钟。高负载时任务可能延迟。在 .github/workflows/*.yml 的 on.schedule 中定义。
# .github/workflows/scheduled.yml
name: Scheduled Job
on:
schedule:
# Runs at 06:00 UTC every day
- cron: '0 6 * * *'
# Runs every 15 minutes
- cron: '*/15 * * * *'
# Runs every Monday at 9 AM UTC
- cron: '0 9 * * 1'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: echo "Triggered by cron schedule"Kubernetes CronJob
在 spec.schedule 中使用标准 5 字段 cron 语法。在 kube-controller-manager 的时区运行(通常是 UTC)。Kubernetes 1.27 起可设置 spec.timeZone(如 "America/New_York")。支持 concurrencyPolicy: Allow、Forbid 或 Replace。
apiVersion: batch/v1
kind: CronJob
metadata:
name: database-backup
spec:
schedule: "0 3 * * *" # daily at 3 AM
timeZone: "America/New_York" # K8s 1.27+
concurrencyPolicy: Forbid # prevent overlapping
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 5
jobTemplate:
spec:
template:
spec:
containers:
- name: backup
image: postgres:16
command: ["/bin/sh", "-c", "pg_dump ..."]
restartPolicy: OnFailureVercel Cron
在 vercel.json 的 crons 数组中定义。使用标准 5 字段语法。在 UTC 运行。触发指定路径的 Serverless 函数。免费版每项目 2 个 cron 任务;Pro 版更多。
// vercel.json
{
"crons": [
{
"path": "/api/daily-cleanup",
"schedule": "0 0 * * *"
},
{
"path": "/api/hourly-sync",
"schedule": "0 * * * *"
}
]
}Cron 表达式解析库
Node.js: cron-parser
Node.js 最流行的 cron 解析库。解析 cron 表达式并计算接下来 N 次执行时间。支持 5 字段和 6 字段(含秒)格式。
import { parseExpression } from 'cron-parser';
const interval = parseExpression('*/15 * * * *');
console.log('Next:', interval.next().toString());
console.log('Next:', interval.next().toString());
console.log('Next:', interval.next().toString());
// With options
const options = {
currentDate: new Date('2026-01-01T00:00:00'),
tz: 'America/New_York'
};
const expr = parseExpression('0 9 * * 1-5', options);
for (let i = 0; i < 5; i++) {
console.log(expr.next().toString());
}Python: croniter
Python 标准的 cron 日期迭代库。支持标准 5 字段和扩展 6 字段表达式。与 datetime 对象配合良好。
from croniter import croniter
from datetime import datetime
base = datetime(2026, 1, 1)
cron = croniter('0 9 * * 1-5', base)
# Get next 5 occurrences
for _ in range(5):
print(cron.get_next(datetime))
# Check if a specific time matches
print(croniter.match('0 9 * * 1', datetime(2026, 3, 2, 9, 0)))
# True (March 2, 2026 is a Monday)其他语言
Go: robfig/cron(事实标准)。Java: Quartz Scheduler(内置 cron 解析器)。Rust: cron crate。PHP: dragonmantank/cron-expression。
// Go: robfig/cron v3
import "github.com/robfig/cron/v3"
c := cron.New()
c.AddFunc("0 9 * * 1-5", func() {
fmt.Println("Weekday morning job")
})
c.Start()
// Rust: cron crate
use cron::Schedule;
let schedule = Schedule::from_str("0 9 * * 1-5").unwrap();
for dt in schedule.upcoming(Utc).take(5) {
println!("{}", dt);
}Cron 任务的时区处理
时区管理不当是 cron 任务 bug 的头号来源。不同系统处理时区的方式各异:
- Linux crontab:使用系统时区。可在 crontab 顶部设置 TZ 变量来覆盖。
- GitHub Actions:始终使用 UTC。无时区配置选项。
- AWS EventBridge:默认 UTC。EventBridge Scheduler 支持 IANA 时区。
- Kubernetes:控制器时区(通常是 UTC)。使用 spec.timeZone(Kubernetes 1.27+)为每个任务设置时区。
- Vercel Cron:始终使用 UTC。
夏令时(DST)注意事项
当 cron 任务依赖本地时间且所在时区实行夏令时,时钟调整时任务可能被跳过或重复运行。春季时钟前调:凌晨 2:30 的任务可能被跳过。秋季时钟回调:凌晨 1:30 的任务可能运行两次。最佳实践是在 UTC 运行关键任务,在应用逻辑中进行时间戳转换。
# Best practice: run in UTC and convert in your app
TZ=UTC
0 8 * * * /path/to/job.sh # always 08:00 UTC
# Inside job.sh, convert to local time if needed:
LOCAL_TIME=$(TZ="America/New_York" date)调试 Cron 任务:日志、监控与告警
日志记录
始终将 stdout 和 stderr 重定向到日志文件。在 crontab 中:
# Redirect both stdout and stderr
*/5 * * * * /path/to/job.sh >> /var/log/myjob.log 2>&1
# With timestamp
*/5 * * * * echo "$(date): starting job" >> /var/log/myjob.log && /path/to/job.sh >> /var/log/myjob.log 2>&1
# Send output via email
MAILTO=dev@example.com
0 6 * * * /path/to/morning-report.sh监控
使用死人开关服务(Cronitor、Healthchecks.io、Better Uptime),让 cron 任务成功时 ping 一个 URL。如果在预期时间窗口内没有收到 ping,你会收到告警。这可以捕获任务运行但无输出的静默失败。
# Dead-man switch with Healthchecks.io
0 3 * * * /path/to/backup.sh && curl -fsS --retry 3 https://hc-ping.com/YOUR-UUID
# Dead-man switch with Cronitor
0 3 * * * cronitor exec abc123 /path/to/backup.sh
# Custom alerting with webhook
0 3 * * * /path/to/backup.sh || curl -X POST https://hooks.slack.com/... -d '{"text":"Backup failed!"}'告警
在 crontab 中设置 MAILTO 接收邮件输出。对于云端 cron,集成 PagerDuty、Opsgenie 或 Slack webhook。监控退出码:非零退出应触发告警。
模拟测试
部署前,通过计算接下来几次执行时间来验证 cron 表达式。使用我们的在线 cron 解析器工具或 cron-parser 库以编程方式生成即将到来的日期。
# Verify with cron-parser (Node.js)
npx cron-parser "0 9 * * 1-5"
# Verify in Python
python3 -c "
from croniter import croniter
from datetime import datetime
c = croniter('0 9 * * 1-5', datetime.now())
for _ in range(10):
print(c.get_next(datetime))
"Cron 的替代方案
systemd 定时器
现代 Linux 替代方案。优势:通过 journalctl 获得更好的日志、依赖管理和 cgroups 资源控制。创建 .timer 单元文件配合 .service 文件。支持单调定时器(启动后 5 分钟运行)和基于日历的定时器。
# /etc/systemd/system/backup.timer
[Unit]
Description=Daily backup timer
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
[Install]
WantedBy=timers.target
# /etc/systemd/system/backup.service
[Unit]
Description=Database backup
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
User=backup
# Enable and start
systemctl enable --now backup.timer
systemctl list-timersat 命令
一次性调度器,在特定时间运行一次命令。与 cron 不同,它不会重复。适用于计划维护或延迟任务。
# Schedule a one-time job
echo "/usr/local/bin/maintenance.sh" | at 3:00 AM tomorrow
echo "reboot" | at 2:00 AM Jan 15
# List pending jobs
atq
# Remove a scheduled job
atrm 42Windows 任务计划程序
Windows 版本的 cron。基于 GUI 和 XML 定义。支持触发器(时间、事件、登录)和条件(空闲、网络)。可通过 PowerShell 的 ScheduledTasks 模块管理。
# PowerShell: create a scheduled task
$action = New-ScheduledTaskAction -Execute "C:\scripts\backup.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At 3am
Register-ScheduledTask -TaskName "DailyBackup" -Action $action -Trigger $trigger
# List scheduled tasks
Get-ScheduledTask | Where-Object {$_.State -eq 'Ready'}快速对比
| Feature | cron | systemd timers | at | Task Scheduler |
|---|---|---|---|---|
| Recurring | Yes | Yes | No (one-shot) | Yes |
| Logging | Manual redirect | journalctl | Event Viewer | |
| Dependencies | None | After/Requires | None | Triggers |
| Resource limits | None | cgroups | None | Settings |
| Syntax | 5 fields | Calendar spec | Natural language | GUI / XML |
| Platform | Unix/Linux | Linux (systemd) | Unix/Linux | Windows |
常见错误与陷阱
忘记时区
你的 cron 守护进程和你的预期可能使用不同的时区。务必在服务器上用 "date" 验证或查阅调度器文档。CI/CD 平台几乎都使用 UTC。
意外地每分钟运行
表达式 * * * * * 每天运行 1440 次。这很少是你想要的。使用 */5 * * * * 表示每 5 分钟,0 * * * * 表示每小时。
混淆星期编号
标准 POSIX cron 中,周日是 0(也是 7),周一是 1。但在 Quartz 中,周日是 1,周六是 7。请查阅平台文档。
| Day | POSIX cron | Quartz |
|---|---|---|
| Sunday | 0 (or 7) | 1 |
| Monday | 1 | 2 |
| Tuesday | 2 | 3 |
| Wednesday | 3 | 4 |
| Thursday | 4 | 5 |
| Friday | 5 | 6 |
| Saturday | 6 | 7 |
未处理重叠执行
如果任务耗时 10 分钟但每 5 分钟运行一次,就会出现重叠执行。使用 flock、Kubernetes concurrencyPolicy: Forbid 或分布式锁(Redis SETNX)。
# Use flock to prevent overlapping
*/5 * * * * flock -n /tmp/myjob.lock /path/to/long-running-job.sh
# Kubernetes concurrencyPolicy
spec:
concurrencyPolicy: Forbid # skip if previous still running忽略输出和错误
Cron 在没有终端的环境运行。环境变量、PATH 和 shell 初始化与交互式会话不同。始终使用命令的绝对路径并重定向输出。
# BAD: relative path, no output capture
*/5 * * * * ./cleanup.sh
# GOOD: absolute path, full environment, output redirect
*/5 * * * * /usr/bin/env bash /home/deploy/scripts/cleanup.sh >> /var/log/cleanup.log 2>&1同时指定日期和星期
标准 cron 中,如果两个字段都设置了(非 *),任务在任一条件匹配时运行(OR 逻辑),而非两者都匹配(AND 逻辑)。这让许多开发者措手不及。
# This runs on the 15th OR on Mondays (OR logic, not AND)
0 0 15 * 1
# If you want the 15th AND it must be a Monday,
# use a wrapper script with date checks instead.Cron 任务的安全注意事项
最小权限原则
以专用服务账户而非 root 运行 cron 任务。使用 /etc/cron.allow 和 /etc/cron.deny 控制哪些用户可以创建 crontab。
# Restrict cron access
echo "deploy" >> /etc/cron.allow
echo "www-data" >> /etc/cron.deny
# Run as non-root user
su - deploy -c "crontab -e"安全的脚本路径
在 crontab 条目中使用绝对路径。相对路径可能被放置在工作目录中的恶意脚本劫持。确保脚本及其父目录具有适当的权限。
# GOOD: absolute path
0 3 * * * /home/deploy/scripts/backup.sh
# Secure script permissions
chmod 750 /home/deploy/scripts/backup.sh
chown deploy:deploy /home/deploy/scripts/backup.sh保护凭据
切勿在 cron 脚本中硬编码密码或 API 密钥。使用从安全文件(chmod 600)加载的环境变量、密钥管理器(AWS Secrets Manager、HashiCorp Vault)或 Kubernetes Secrets。
# Load credentials from a secured file
0 3 * * * . /home/deploy/.env && /home/deploy/scripts/backup.sh
# .env file permissions
chmod 600 /home/deploy/.env
chown deploy:deploy /home/deploy/.env审计和轮换日志
Cron 任务日志可能包含敏感数据。使用 logrotate 管理日志文件大小。限制日志文件权限。考虑将日志转发到具有访问控制的集中式系统。
监控未授权变更
使用文件完整性监控(AIDE、OSSEC)检测对 crontab 文件的未授权修改。定期审查 /var/spool/cron/。
另请参阅:timestamp converter
在线解析和测试你的 cron 表达式
打开 Cron 表达式解析器常见问题
什么是 cron 表达式,5 个字段分别是什么?
Cron 表达式是一种基于时间的字符串,定义计划任务的执行时间。5 个字段是:分钟(0-59)、小时(0-23)、日期(1-31)、月份(1-12)和星期(0-7,其中 0 和 7 都代表周日)。每个字段可使用 *、/、- 和逗号等特殊字符定义复杂调度。
如何编写每 5 分钟执行一次的 cron 表达式?
使用 */5 * * * *。分钟字段中的 */5 表示"从 0 开始每第 5 分钟"。每小时在第 0、5、10、15、20、25、30、35、40、45、50、55 分钟触发。
5 字段和 6 字段 cron 表达式有什么区别?
标准 5 字段格式包含分钟、小时、日期、月份和星期。6 字段格式(Quartz Scheduler、Spring 和 AWS 使用)在前面增加了秒字段。某些 7 字段格式还在末尾追加年份字段。GitHub Actions、Kubernetes 和 Linux crontab 使用 5 字段格式。
Cron 表达式如何处理时区?
Linux crontab 使用系统时区(可通过 TZ 变量覆盖)。GitHub Actions 和 Vercel 始终使用 UTC。AWS EventBridge Scheduler 支持 IANA 时区名称。Kubernetes 1.27+ 支持 CronJob 资源的 spec.timeZone。务必验证调度器时区以避免漏执行或重复执行。
特殊字符 L、W 和 # 在 cron 中是什么意思?
这些是 Quartz/扩展实现专用字符。L 表示"最后":在日期字段为当月最后一天;星期字段中 5L 为当月最后一个周五。W 表示"最近的工作日":15W 在最接近 15 日的周一至周五触发。# 表示"第 N 个":星期字段中 5#3 为当月第三个周五。
如何防止 cron 任务重叠执行?
使用 flock 文件锁:flock -n /tmp/myjob.lock /path/to/script.sh。在 Kubernetes 中,在 CronJob spec 上设置 concurrencyPolicy: Forbid。对于分布式系统,通过 Redis SETNX 或数据库咨询锁使用分布式锁。
cron 和 systemd 定时器有什么区别?
Cron 是传统的 Unix 任务调度器,语法简单。systemd 定时器是现代 Linux 替代方案,提供更好的日志(journalctl)、依赖管理、通过 cgroups 的资源控制,以及单调(相对)和日历(绝对)两种定时器类型。systemd 定时器需要两个单元文件(.timer + .service),而 cron 只需一行 crontab。
可以在 Docker 容器中使用 cron 表达式吗?
可以,但推荐使用宿主机 cron 或编排器(Kubernetes CronJob、ECS Scheduled Tasks)而非在容器内安装 cron。如果必须在容器中运行 cron,确保 cron 守护进程是前台进程(cron -f),并在 Dockerfile 中正确安装 cron 和设置 crontab。
总结
Cron 表达式仍然是基于时间的任务调度的通用语言。从简单的 Linux crontab 条目到具有时区支持和并发策略的复杂 Kubernetes CronJob,其核心语法自 1970 年代起经受住了时间的考验。
可靠的 cron 任务管理关键在于:了解平台语法和时区、防止重叠运行、记录所有输出、使用死人开关监控执行,以及遵循安全最佳实践。使用我们的在线 cron 表达式解析器在部署到生产环境之前验证和测试你的表达式。