Skip to content
CertoflowCertoflow
Developer Tools

Cron Expression Generator

Build and validate cron expressions visually.

Example

In:
Weekdays at 9 AM
Out:
0 9 * * 1-5

Format: minute hour day-of-month month day-of-week. Use * for any, */n for intervals, 1-5 for ranges.

Weekdays at 9 AM

Guide

Introduction

Cron syntax is concise to the point of cryptic. Five space-separated fields — minute, hour, day of month, month, day of week — control when Linux crontab entries, Kubernetes CronJobs, GitHub Actions schedules, and CI pipelines fire. A single misplaced asterisk runs your backup job every minute instead of nightly. A misunderstood day-of-week field skips Monday executions silently for months.

Certoflow's Cron Expression Generator builds valid expressions visually, validates field ranges, and describes the schedule in plain language.

What this tool does

Configure each cron field individually or click presets for common patterns:

PresetExpressionMeaning
Every 5 minutes*/5 * * * *Runs twelve times per hour
Daily at 9 AM0 9 * * *Once per day, 09:00
Weekdays at 9 AM0 9 * * 1-5Monday–Friday only
First of month0 0 1 * *Midnight on day 1

Click Generate Expression to validate and output the five-field string ready for crontab, YAML, or Terraform.

How it works

Standard Unix cron format:

┌──────────── minute (0-59)
│ ┌────────── hour (0-23)
│ │ ┌──────── day of month (1-31)
│ │ │ ┌────── month (1-12)
│ │ │ │ ┌──── day of week (0-7, 0 and 7 = Sunday)
│ │ │ │ │
* * * * *

The validator checks:

  • Numeric ranges per field
  • Step syntax (*/15)
  • Range syntax (1-5)
  • List syntax (1,3,5)

Invalid combinations return errors before you paste broken config into production.

Real-world examples

Kubernetes CronJob manifest

apiVersion: batch/v1
kind: CronJob
metadata:
  name: database-backup
spec:
  schedule: "0 2 * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: backup
            image: backup-runner:latest

Generate 0 2 * * * (daily 2 AM) locally, paste into manifest under version control.

GitHub Actions scheduled workflow

on:
  schedule:
    - cron: '0 9 * * 1-5'

Weekday 9 AM UTC for dependency audit scans.

Traditional crontab entry

0 */4 * * * /opt/scripts/sync-inventory.sh

Every four hours on the hour — verify with preset before crontab -e.

AWS EventBridge note

EventBridge uses six fields (includes seconds). Add seconds manually as 0 prefix when adapting: 0 0 9 ? * MON-FRI * uses different wildcards — consult AWS docs for cloud-specific dialects.

Common mistakes

Day-of-month AND day-of-week interaction. When both fields are restricted (neither *), cron triggers if either matches — not both. Scheduling "first Monday of month" requires advanced expressions beyond basic five-field cron.

Timezone ambiguity. Crontab uses server local time. Kubernetes CronJob uses controller timezone (often UTC). GitHub Actions schedules run in UTC. Always confirm timezone context.

Using * in minute field unintentionally. * * * * * runs every minute — 1,440 executions daily. Expensive on cloud billed per invocation.

Off-by-one day of week. Some systems use 0=Sunday; others use 1=Monday. Certoflow follows standard 0–7 with 0 and 7 as Sunday.

Forgetting step syntax limits. */90 in minute field still caps at 59 — invalid steps error at validation.

Cron field syntax reference

SymbolMeaningExample
*Every value* in hour = every hour
*/nEvery n units*/15 in minute
n-mRange1-5 weekdays
n,mList0,30 at :00 and :30
nSpecific9 in hour = 9 AM

Use cases

PlatformSchedule need
Linux serversLog rotation, backups
KubernetesBatch processing, cleanup
GitHub/GitLab CINightly builds, security scans
Django/Celery beatPeriodic task definitions
MonitoringSynthetic check intervals

Validation before deploy checklist

  1. Confirm timezone of execution environment.
  2. Test in staging with shortened interval (*/5 * * * *) before production schedule.
  3. Document human-readable meaning in infra README.
  4. Set alerting if job skips expected runs.
  5. Version control the expression string — not just the deployed artifact.

Related developer tools

Pair scheduled jobs with UUID Generator for run correlation IDs in logs. Encode job output payloads via Base64 Encode when storing in key-value config. Debug JSON schedule configs in JSON Formatter before applying to orchestrators.

Quartz vs Unix cron dialects

Quartz schedulers (Java) use six required fields plus optional year — different from five-field Unix cron. Spring @Scheduled cron expressions follow six-field Quartz format. Always confirm which dialect your framework expects before pasting generated five-field output.

Monitoring generated schedules

After deploying a new cron expression:

  1. Log first three execution timestamps.
  2. Compare against expected wall-clock times in deployment timezone.
  3. Alert if missed window exceeds one interval cycle.

Pair generated expressions with UUID Generator output for per-run trace IDs in structured logs.

Summary

Cron Expression Generator removes the memorization burden from a syntax most developers touch monthly but misconfigure dramatically when they do. Build visually, validate locally, copy confidently — and sleep through the night knowing your backup runs at 2 AM, not every two minutes.

Frequently Asked Questions

What cron format does this tool use?
Standard five-field Unix cron: minute hour day-of-month month day-of-week. Some platforms like AWS EventBridge add a sixth seconds field — adjust manually if required.
What does an asterisk mean?
An asterisk in a field means every valid value — * in the hour field means every hour of the day.
How do I run a job every 15 minutes?
Use */15 in the minute field with * in the others: */15 * * * *. The preset buttons include common intervals.
Are day-of-week and day-of-month AND or OR?
In standard cron, if both fields are restricted (not *), a match on either field triggers the job. This catches many developers off guard when scheduling monthly AND weekday-specific jobs.
Does this validate my expression?
Yes. Each field is checked for valid ranges, steps, and ranges before output. Invalid combinations show an error instead of silently producing broken crontab lines.

Continue with these related utilities.