How to use the Cron Expression Generator
- Pick a common schedule, or use Build a schedule to choose a frequency, weekdays and time, then click Use this schedule.
- Or paste an existing expression such as
30 2 * * 1into the Cron expression box — the plain-English description updates as you type. - Fine-tune individual parts in Edit fields (minute, hour, day of month, month, day of week).
- Check the Next run times list in local time or UTC, then copy the expression into your crontab, CI workflow or scheduler.
What is a cron expression?
A cron expression is a compact schedule made of five space-separated fields that tells the Unix cron daemon — and tools built on the same syntax, such as GitHub Actions, GitLab CI, Kubernetes CronJobs, Vercel and many job queues — when to run a task. This generator lets you build an expression from dropdowns, explains any expression in plain English using the open-source cRonstrue library, and calculates the upcoming run times so you can verify a schedule before it goes live.
The five fields
┌──────── minute (0–59)
│ ┌────── hour (0–23)
│ │ ┌──── day of month (1–31)
│ │ │ ┌── month (1–12, JAN–DEC)
│ │ │ │ ┌ day of week (0–6, SUN–SAT)
│ │ │ │ │
* * * * * command
In the day-of-week field, 7 also means Sunday.
Each field accepts * (every value), a single number, a range 1-5, a list 1,15,30, a step */10 or a stepped range 9-17/2. Some schedulers (Quartz, Spring, AWS EventBridge) add a leading seconds field; tick “Seconds field” to work with 6-part expressions.
Examples
| Expression | Meaning |
|---|---|
*/5 * * * * | Every 5 minutes |
0 * * * * | At the start of every hour |
30 2 * * * | Every day at 02:30 |
0 9 * * 1-5 | 09:00 on weekdays |
0 0 1 * * | Midnight on the 1st of every month |
0 0 1 */3 * | Midnight on the first day of each quarter |
15 14 1 * * | 14:15 on the 1st of every month |
Common mistakes
- Day of month and day of week. If both fields are restricted, classic cron runs the job when either matches.
0 0 13 * 5means “every 13th and every Friday”, not “Friday the 13th”. The next-run list follows this rule. - Forgetting the minute.
* 9 * * *runs 60 times between 09:00 and 09:59. Use0 9 * * *to run once. - Time zones. Cron uses the server's time zone; GitHub Actions and most cloud schedulers use UTC. Switch the run list to UTC to compare.
- Uneven steps.
*/45in the minute field fires at :00 and :45, then :00 again — steps restart each hour, they don't carry over. - Quartz day numbers. Quartz counts Sunday as 1, while Unix cron uses 0 (or 7). This tool uses Unix numbering.
Non-standard extensions
L in the day-of-month field (last day of the month), 5L (last Friday) and 1#2 (second Monday) are supported by Quartz and some cron implementations but not by Vixie cron on Linux. They are explained and previewed here, but check that your scheduler accepts them. Need to convert a run time to an epoch value? Try the Unix Timestamp Converter or the Time Zone Converter.
Tools that pair well with the Cron Expression Generator
- Date Difference Calculator — Count the days between two dates — including business days and a years/months/days breakdown — add or subtract time from a date, or run a live countdown.
- Regex Tester — Type a pattern and watch matches highlight live in your test text.
- HTML Formatter — Paste minified or messy markup and get clean, consistently indented HTML — including embedded <style> and <script> blocks.
- CSS Formatter — Turn a minified stylesheet into readable CSS with one property per line and properly nested @media blocks.
Frequently asked questions
What does */15 mean in cron?
*/15 in the minute field means every 15th minute starting at 0, i.e. :00, :15, :30 and :45. 5-50/15 would give :05, :20, :35 and :50.How do I run a cron job every 30 seconds?
*/30 * * * * *), or add two crontab lines where the second one starts with sleep 30;.Is cron time UTC or local?
CRON_TZ variable). GitHub Actions, Kubernetes (by default) and most cloud schedulers evaluate expressions in UTC. The run list here can show either.What is the difference between @daily and 0 0 * * *?
@daily (or @midnight) is a shorthand for 0 0 * * *. Likewise @hourly = 0 * * * *, @weekly = 0 0 * * 0, @monthly = 0 0 1 * * and @yearly = 0 0 1 1 *.How do I schedule a job on the last day of the month?
L if your scheduler supports it (0 0 L * *), or run daily on days 28–31 and test the date in the command: 0 0 28-31 * * [ "$(date -d tomorrow +\%d)" = "01" ] && ./job.sh.Why does my expression never run?
0 0 31 2 * (31 February) or 0 0 31 4 * (31 April) never match. The next-run list shows a warning when no run is found in the next ten years.