100% Private
No Signup
Free Forever
One of 64 free AI tools by Mahmoud Zalt.
Free Cron Expression Generator
Build cron schedules visually|4.8 (1,877)
Create cron expressions using visual dropdowns, presets, or paste an existing expression to decode it in plain English instantly. Supports standard 5-field cron syntax (minute, hour, day of month, month, day of week) used by crontab on Linux and macOS, GitHub Actions schedule triggers, Kubernetes CronJobs, GitLab CI pipeline schedules, Jenkins, AWS EventBridge, and Google Cloud Scheduler. The built-in cheat sheet covers every special character including asterisk, slash, hyphen, and comma, plus shortcut strings like @daily, @weekly, and @monthly. Runs entirely in your browser with no server calls, no signup, and no data collection, completely private by design.
Free and provided as is, without warranty. Use at your own risk. Terms
What Is a Cron Expression?
Cron is the standard job scheduler on Unix-like operating systems, originally created in the 1970s and still the universal way to define recurring schedules. A cron expression is a compact string of five space-separated fields that tells the system exactly when to run a task: minute (0-59), hour (0-23), day of month (1-31), month (1-12), and day of week (0-6, where 0 is Sunday). Four special characters provide flexible scheduling, asterisk (*) matches every value, slash (/) sets step intervals like "every 15 minutes," hyphen (-) defines ranges like "Monday through Friday," and comma (,) creates lists like "the 1st and 15th."
Cron syntax is used far beyond the original Unix crontab. Kubernetes CronJobs, GitHub Actions scheduled workflows, GitLab CI pipeline schedules, Jenkins build triggers, AWS EventBridge rules, Google Cloud Scheduler, and Azure Logic Apps all accept cron expressions to define when jobs should fire. Many cron implementations also support shortcut strings like @daily (equivalent to "0 0 * * *"), @weekly, @monthly, @yearly, @hourly, and @reboot for common scheduling patterns. This tool helps you build, visualize, and decode cron expressions without memorizing the syntax, with a built-in cheat sheet and plain-English descriptions that update as you select values.
Cron Across Platforms: Differences That Matter
While the 5-field cron format is nearly universal, each platform adds its own quirks. GitHub Actions interprets all cron schedules in UTC with no timezone override and enforces a minimum interval of 5 minutes, scheduled runs during peak load may also be delayed. Kubernetes CronJobs use standard 5-field cron but since version 1.27 support a spec.timeZone field for explicit timezone control, with automatic DST handling that skips jobs in non-existent hours and deduplicates jobs in repeated hours. GitLab CI uses the fugit library to parse cron and supports extended syntax like # for nth-weekday and % for step-based day-of-week. Jenkins adds an H symbol that hashes the job name to spread load across an interval.
AWS EventBridge uses a 6-field cron format (adding a year field) wrapped in cron() syntax and requires a ? wildcard in either the day-of-month or day-of-week field, you cannot specify both simultaneously. Google Cloud Scheduler uses standard 5-field unix-cron and also accepts named months (JAN-DEC) and named days (SUN-SAT) alongside numeric values. Quartz cron, used in Java and Spring applications, is the most different, it uses 6-7 fields starting with seconds, numbers days of the week 1-7 instead of 0-6, and adds special characters like L (last), W (nearest weekday), and # (nth occurrence). Expressions generated by this tool are standard 5-field format and work directly with crontab, GitHub Actions, Kubernetes, GitLab CI, Google Cloud Scheduler, and most CI/CD systems.
Timezone Pitfalls, Debugging Tips, and Cron vs Systemd Timers
The most common reason cron jobs run at unexpected times is a timezone mismatch. Cron uses the system timezone by default, so a server set to UTC will interpret "0 9 * * *" as 9 AM UTC, not your local time. The safest approach is to standardize all servers on UTC and calculate offsets in your head or with a converter. Daylight saving time adds another trap: jobs scheduled between 1 AM and 3 AM in DST-observing timezones may be skipped entirely during the spring-forward transition or executed twice during the fall-back transition. Avoid scheduling critical jobs in the 1-3 AM window, or use platforms like Kubernetes that handle DST transitions automatically.
When debugging a broken cron schedule, start by verifying the expression in this tool to confirm it matches your intent. Common mistakes include confusing the field order (minute is first, not hour), using 7 for Sunday when your system expects 0, and assuming day-of-month and day-of-week create an AND condition when they actually create an OR (a schedule with "15" in the day-of-month and "1" in the day-of-week runs on the 15th AND every Monday, not on Mondays that fall on the 15th). On Linux, check cron daemon status, review logs in /var/log/syslog or journalctl, and remember that cron runs with a minimal PATH, always use absolute paths for scripts and binaries. For teams on modern Linux servers who need richer scheduling, systemd timers offer built-in logging via journald, concurrency protection, missed-job catch-up with Persistent=true, and dependency management, at the cost of requiring two configuration files per scheduled task instead of a single crontab line.
What people actually schedule with cron
Database backups are the classic example, typically scheduled for a low-traffic window like "30 2 * * *" so a nightly dump does not compete with production load. Certificate renewal jobs for Let's Encrypt commonly run twice a day, since certbot recommends frequent checks so a renewal has multiple chances to succeed before a certificate expires. Log rotation, cache warming before a traffic peak, and nightly report or digest emails round out the most common recurring jobs on any backend team's crontab or CronJob list.
In CI/CD specifically, scheduled workflows are used for things that should not wait for a code push: a nightly full test suite run that is too slow for every pull request, a weekly dependency-update check, or a periodic job that cleans up stale preview environments and unused container images.
A short history of cron
Cron dates back to Version 7 Unix in 1979, and the modern implementation most Linux and macOS systems use today, "Vixie cron," was written by Paul Vixie in 1987 and later became the basis for the cronie and ISC cron variants still shipped by most distributions. The name comes from the Greek "chronos," and the design goal from the start was simple: a single daemon that wakes up every minute, reads a small config file per user, and runs whatever matches the current time.
That simplicity is exactly why cron syntax has outlived nearly every scheduling system built after it. Kubernetes, GitHub Actions, GitLab CI, and cloud schedulers from AWS and Google could all have invented their own schedule format, but every one of them chose to keep the same five-field expression syntax, because it was already the shared vocabulary every engineer already knew.
Making scheduled jobs reliable, not just running
A cron job that silently stops running is one of the most common causes of "quiet" outages, since nothing crashes, a report just never gets sent or a backup never runs, and nobody notices until it matters. Dead man's switch monitoring services like Healthchecks.io (free tier for a handful of checks, paid plans from around 5 dollars a month) and Cronitor (plans starting around 25 dollars a month) work by expecting a ping after every run and alerting you the moment one is missed, which catches failures a log file alone will not surface.
It is also worth being deliberate about exact minutes: scheduling everything at "0 0 * * *" or "0 * * * *" is common enough that shared infrastructure, cloud schedulers, CI runners, cron-based SaaS platforms, can see a real load spike at the top of every hour from thousands of jobs firing at once. Offsetting your schedule by a few minutes, "3 0 * * *" instead of "0 0 * * *", avoids piling onto that thundering herd for no real benefit.
How It Works
Select minute, hour, day, month, and weekday from dropdowns or pick a preset.
See the cron expression and plain-English description update live.
Copy the expression or paste one to decode it.
Need expert help with AI?
Looking for a specialist to help integrate, optimize, or consult on AI systems? Book a one-on-one technical consultation with an experienced AI consultant to get tailored advice.
Key Features
Privacy & Trust
Use Cases
Limitations
- Standard 5-field cron only (no seconds or year fields)
- Does not support Quartz or Spring cron format (6-7 fields)
- Does not predict next execution times
- Does not support named months or days (JAN, MON)
Frequently Asked Questions
Is this Cron Generator free?
Yes, it is completely free with no usage limits, no signup, and no ads. Cloud-based cron tools and scheduling services often charge monthly fees, but because this tool runs entirely in your browser with pure client-side JavaScript, there are no server costs. You can build and decode as many cron expressions as you need without paying anything.
What is a cron expression and what are the 5 fields?
A cron expression is a compact string of five space-separated fields that defines a recurring schedule: minute (0-59), hour (0-23), day of month (1-31), month (1-12), and day of week (0-6, where 0 is Sunday). Each field accepts specific values, ranges, lists, and step values. For example, "30 9 * * 1-5" means "at 9:30 AM every Monday through Friday." Cron was originally created for the Unix operating system in the 1970s and remains the universal standard for time-based job scheduling across Linux, macOS, Kubernetes, CI/CD platforms, and cloud services.
What do the special characters *, /, -, and, mean in cron?
The asterisk (*) matches every possible value for that field, so * in the hour field means every hour. The slash (/) defines step values, */15 in the minute field means every 15 minutes (at 0, 15, 30, and 45). The hyphen (-) defines an inclusive range, 1-5 in the day-of-week field means Monday through Friday. The comma (,) creates a list of specific values, 1,15 in the day-of-month field means the 1st and 15th. These four characters can be combined for complex schedules like "0 */2 1-15 * *" which runs every 2 hours on the first 15 days of every month.
What are @daily, @weekly, @monthly, and the other cron shortcut strings?
Many cron implementations support predefined shortcut strings that replace the five-field syntax for common schedules. @yearly (or @annually) is equivalent to "0 0 1 1 *", once a year at midnight on January 1st. @monthly equals "0 0 1 * *", midnight on the first of every month. @weekly equals "0 0 * * 0", midnight every Sunday. @daily (or @midnight) equals "0 0 * * *", once a day at midnight. @hourly equals "0 * * * *", at the start of every hour. @reboot runs once when the cron daemon starts. These shortcuts are supported by most Linux crontab implementations, but not all platforms support them, GitHub Actions and Kubernetes CronJobs, for example, require the standard five-field format.
Q&A SESSION
Got a quick technical question?
Skip the back-and-forth. Get a direct answer from an experienced engineer.