Quick Answer
A cron expression is 5 space-separated fields: minute hour day-of-month month day-of-week. 0 3 * * * means "3 AM every day". */5 * * * * means "every 5 minutes". Use the examples below as a starting point, paste into your scheduler, and double-check the timezone.
Cron Expression Builder & Reference
Pick a schedule, copy the expression. Or read the field reference and write your own. Built for the standard 5-field cron syntax used by Linux crontab and most hosted schedulers (including Requex).
The 5 fields
┌───────── minute (0-59) │ ┌─────── hour (0-23) │ │ ┌───── day of month (1-31) │ │ │ ┌─── month (1-12) │ │ │ │ ┌─ day of week (0-6, Sunday = 0) │ │ │ │ │ * * * * *
| Field | Range | Special characters |
|---|---|---|
| Minute | 0-59 | *, /, -, , |
| Hour | 0-23 | *, /, -, , |
| Day of month | 1-31 | *, /, -, ,, ? |
| Month | 1-12 or JAN-DEC | *, /, -, , |
| Day of week | 0-6 or SUN-SAT | *, /, -, ,, ? |
Special characters explained
*— any value.* * * * *= every minute.,— list.0 9,12,18 * * *= 9 AM, noon, and 6 PM daily.-— range.0 9-17 * * 1-5= every hour 9 AM–5 PM, weekdays./— step.*/15 * * * *= every 15 minutes.?— no specific value (used in day-of-month / day-of-week to mean "use the other field").
Ready-to-use expressions
| Schedule | Expression |
|---|---|
| Every minute | * * * * * |
| Every 5 minutes | */5 * * * * |
| Every 15 minutes | */15 * * * * |
| Every hour, on the hour | 0 * * * * |
| Every 2 hours | 0 */2 * * * |
| 9:30 AM every day | 30 9 * * * |
| Midnight every day | 0 0 * * * |
| 3 AM every day | 0 3 * * * |
| Weekdays at 9 AM | 0 9 * * 1-5 |
| Every Friday at 6 PM | 0 18 * * 5 |
| Every Sunday at noon | 0 12 * * 0 |
| First of every month, midnight | 0 0 1 * * |
| January 1st, midnight | 0 0 1 1 * |
| Every Monday, midnight | 0 0 * * 1 |
| 10:15 AM on weekdays | 15 10 ? * 1-5 |
| Every hour, 9 AM–5 PM, weekdays | 0 9-17 * * 1-5 |
Mistakes that bite
Confusing day-of-month and day-of-week
If both fields are set to specific values, most cron engines run when either matches (OR logic, not AND). 0 0 15 * 1 runs every 15th AND every Monday — usually not what you want. Use ? in one of the two fields to disambiguate (Quartz syntax).
Forgetting the timezone
A cron expression is timezone-agnostic — "9 AM" depends on whose 9 AM. Linux crontab uses the server's local time. Hosted schedulers (Requex, GitHub Actions, etc.) usually default to UTC. Always set an explicit IANA timezone for daily schedules.
Day-of-week numbering varies
Some engines use 0–6 with Sunday = 0. Others use 1–7 with Sunday = 1. Spelled-out names (MON, TUE, ...) avoid the ambiguity.
Sub-minute schedules do not exist
Standard cron has 1-minute resolution. "Every 30 seconds" needs a different approach (a long-running script, or two cron jobs offset by 30 seconds via sleep).
Common questions
How do I write a cron expression for every 30 minutes?
*/30 * * * * runs at :00 and :30 of every hour. Or list the minutes explicitly: 0,30 * * * *.
How do I run a job only on the last day of the month?
Standard cron does not have an "L" (last) shortcut. Use 0 0 28-31 * * combined with a script-level check, or use Quartz cron (supported by some hosted schedulers) which adds L and W tokens.
Is @daily a real cron expression?
It is a shortcut supported by Linux cron — equivalent to 0 0 * * *. Other shortcuts: @hourly, @weekly, @monthly, @yearly. Most hosted schedulers support them; some do not, so the explicit 5-field form is safer.
Where can I run this expression?
Anywhere that accepts cron syntax — Linux crontab, GitHub Actions schedules, AWS EventBridge, Kubernetes CronJob, GitLab pipelines, and hosted schedulers like Requex's online cron job service.