Linux crontab
# At 09:00, on weekdays. 0 9 * * 1-5 /usr/bin/env your-script.sh
Runs on the server's own clock.
Pikkola Cron Studio, tool No. 16
A cron expression is five numbers and a promise. This page reads it back: the sentence, each field, and the next ten times it will actually run, on your clock and in UTC. Build one with dropdowns, then take it away in the dialect your platform wants.
Studio
Everything below updates as you type. The simulation runs against your browser's own clock and time zone rules, not a guess made elsewhere.
At 09:00, on weekdays.
| Field | Written | Means |
|---|
Builder
Pick the parts, watch the expression assemble, then send it up to the studio to see when it runs.
0 9 * * 1-5
At 09:00, on weekdays.
Platforms
Each card is built from the expression above. Copy takes the whole block, comments included.
# At 09:00, on weekdays. 0 9 * * 1-5 /usr/bin/env your-script.sh
Runs on the server's own clock.
on:
schedule:
- cron: '0 9 * * 1-5'
Actions schedules are UTC.
cron(0 9 ? * 1-5 *)
Six fields, UTC, question mark in one day field.
spec: schedule: "0 9 * * 1-5"
The controller reads the cluster time zone unless you set spec.timeZone.
cron.schedule('0 9 * * 1-5', runJob);
node-cron reads the server's local time zone.
crontab(minute='0', hour='9', day_of_week='1-5')
Celery beat reads day_of_week with Sunday as 0.
Syntax
Cron is small. Almost everything that goes wrong is one of these tokens read the wrong way.
| Token | What it does | Example |
|---|---|---|
| * | Any value in this field | * * * * * |
| , | A list. No spaces around the commas | 0 9,18 * * * |
| - | A range, both ends included | 0 9 * * 1-5 |
| / | A step | */15 * * * * |
| ? | No specific value | 0 9 ? * 1-5 |
| L | Last day of the month, or the last given weekday | 0 0 L * * |
| # | The nth weekday of the month | 0 0 * * 2#2 |
| JAN | Month and weekday names, three letters, any case | 0 0 1 JAN * |
| 7 fields | Seconds first, and a year at the end | 0 0 9 * * 1-5 2027 |
Why this one
Most cron pages tell you what each position means. This one tells you the date, the hour and how long from now, so a mistake shows up as a time you did not want rather than a rule you misread.
A server in Frankfurt and a team in Seoul disagree about what 02:30 means. Both readings sit under the expression, and the daylight saving change is applied from the browser's own rules.
The expression stays in the tab. No account, no analytics, no request with your schedule in it. The page works with the network off.
The expression lives in the address bar and in this tab. Closing it throws the rest away.
Questions
No. Parsing, matching and the run simulation all happen in the page. There is no server to send it to, and the content security policy blocks every other origin.
Five fields for a standard crontab, six when the first field is seconds (Quartz, Spring, node-cron with seconds), seven when a year is appended. It accepts lists, ranges, steps, names, question marks, L for the last day and 5#2 for the second Friday.
As in Vixie cron: when both are restricted, a day matches if either one matches. Quartz instead wants a question mark in one of them and treats the other alone. This page follows the crontab rule, and says in the tags when both are set.
The simulation uses the browser's time zone database. A run that falls in the hour skipped in spring is skipped; a run in the hour repeated in autumn is listed once. Look at the first run after a change if the job matters.
Eight years, which covers a 29 February and most yearly schedules. With a year field it stops at the last year you wrote.
Yes. The address bar keeps the expression as you type, so copying the URL is enough. The language comes along too, not the theme.
EventBridge wants six fields in UTC, a question mark in one of the two day fields, and 0/n instead of */n. The card does the translation, and the note says what changed. Check the time zone before you save the rule.
Made by one person, free to use