Công Cụ Nhanh

Cron expression explainer

5 fields: minute hour day month weekday (like Linux crontab); 6 fields with seconds first. @daily, @hourly… also work.

Quick picks

Meaning

At 09:00, on Monday through Friday

Field by field
Minute00
Hour99
Day of month*any value
Month*any value
Day of week1-51, 2, 3, 4, 5

Next 10 runs

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10

Build an expression

Run
30 8 * * *

Processed in your browser. Your files and data are never uploaded to a server.

Quick answer

A cron expression has 5 space-separated fields: minute, hour, day of month, month and day of week. For example “0 9 * * 1-5” means 9:00 every Monday to Friday, and “*/15 * * * *” means every 15 minutes.

What is a cron expression?

Type a cron expression to read it in plain English, see how each field is interpreted and list the next 10 run times in the time zone you pick (Ho Chi Minh City, UTC, Tokyo, New York…). The tool understands Linux crontab (Vixie cron) syntax: *, commas, ranges like 1-5, steps like */10, month and weekday names (JAN, MON), macros such as @daily and @hourly, and the 6-field form with seconds first. The builder writes an expression for you without remembering the field order. Everything runs in your browser.

Illustration of a wall clock beside a desk calendar page, with pins on regular days and a dashed looping arrow linking them like a repeating schedule

How to read and check a cron expression

  1. 1

    Paste the expression into the “Cron expression” box, for example a line from crontab -e (just the first 5 fields, not the command).

  2. 2

    Read the sentence and the field table to confirm the schedule. If the syntax is wrong, the error says which field is the problem.

  3. 3

    Choose your server's time zone (servers often run on UTC) to see the next 10 runs exactly as the server will execute them.

  4. 4

    To write a new schedule, use “Build an expression”: pick how often, the time and days, then press “Use this expression”.

The five crontab fields

PositionFieldValuesExample
1Minute0–5930 = minute 30
2Hour0–2314 = 2 pm
3Day of month1–311 = the 1st
4Month1–12 or JAN–DEC*/3 = every quarter (1, 4, 7, 10)
5Day of week0–7 or SUN–SAT (0 and 7 are both Sunday)1-5 = Monday to Friday

Swipe sideways to see the whole table →

Symbols: * any value · , list (1,15) · - range (9-17) · / step (*/10 means 0, 10, 20…).

Common cron expressions

ExpressionMeaning
* * * * *Every minute
*/5 * * * *Every 5 minutes
0 * * * *At the start of every hour
0 0 * * *Midnight every day (same as @daily)
30 2 * * *2:30 am every day, good for backups
0 9 * * 1-59:00 on weekdays
0 8 * * 18:00 every Monday
0 0 1 * *Midnight on the 1st of every month
0 0 1 1 *Midnight on 1 January (same as @yearly)

Linux crontab vs Quartz vs GitHub Actions

AspectLinux crontabQuartz / SpringGitHub Actions
Fields5 (minute → weekday)6–7 (seconds first, year last)5, like Linux
Day of week0–7, 0 and 7 are Sunday1–7, 1 is Sunday0–6, 0 is Sunday
Day and weekday both setRuns when EITHER matchesOne of them must be ?Same as Linux
Extra syntax@daily, @reboot…L, W, # (last day, second Friday…)No macros
Time zoneServer time (or CRON_TZ)Application settingAlways UTC

Swipe sideways to see the whole table →

GitHub Actions uses UTC: for 8:00 in Vietnam (UTC+7) write 0 1 * * *. Scheduled runs can be a few minutes late when GitHub is busy.

Real-world examples

Nightly backup at 2 am

0 2 * * * runs at 02:00 every day. On a server set to UTC that is 09:00 in Vietnam; pick UTC on the right to check before saving the job.

Weekly report

0 17 * * 5 runs at 17:00 every Friday. The list of next runs shows the coming Fridays straight away.

Both day and weekday set

0 0 13 * 5 is NOT “Friday the 13th”: it means “the 13th or any Friday”, because Linux cron combines the two fields with OR.

GitHub Actions workflow at 7:30 am Vietnam time

Convert to UTC: 7:30 − 7 hours = 0:30, so write schedule: cron: '30 0 * * *'. Pick UTC here to see the real run times.

Common mistakes

The job runs hours off.
The server or service (GitHub Actions, many cloud schedulers) uses UTC. Convert the time to UTC or set CRON_TZ at the top of the crontab if your cron supports it.
* 9 * * * runs 60 times.
A * in the minute field means every minute of hour 9. To run once at 9:00 write 0 9 * * *.
L, W or # is rejected.
That is Quartz / Spring syntax that Linux crontab does not understand. For “last day of the month” on Linux, run on days 28–31 and check in the command whether tomorrow is the 1st.
Day 31 skips some months.
Months without a 31st (April, June, September, November, February) are skipped; cron does not move the run to the last day.

Which time zone does cron use?

Cron uses the server's system time. Check it with timedatectl or date. Many VPS images default to UTC, so 0 9 * * * runs at 16:00 in Vietnam.

The run list in this tool uses the time zone you select. In zones with daylight saving time, wall times that do not exist on the change day are skipped.

Glossary

Cron
The scheduler built into Linux / Unix that runs commands at set times.
Crontab
Cron's schedule table; each line holds a time expression and a command. Edit it with crontab -e.
Cron job
One scheduled task, such as a nightly database backup.
Step
The /n syntax: */15 in the minute field means minutes 0, 15, 30 and 45.
Macro
A shorthand for a common schedule: @hourly, @daily, @weekly, @monthly, @yearly.
UTC
Coordinated Universal Time; Vietnam is UTC+7 all year with no daylight saving.

Frequently asked questions

Can cron run every second?

Linux crontab's smallest step is one minute. Some libraries (node-cron, Spring) add a seconds field at the front; this tool reads that 6-field form.

What is @reboot?

It runs the command once each time the server boots. There is no repeating schedule, so there are no next run times to show.

How do I list cron jobs on a server?

Run crontab -l for the current user and also look at /etc/crontab and /etc/cron.d. In aaPanel, jobs are under the Cron menu.

Does */7 in the minute field run every 7 minutes exactly?

Not quite: */7 means minutes 0, 7, 14… 56 and then 0 of the next hour, so the last gap of each hour is only 4 minutes.

My cron job runs but nothing happens. Where are the errors?

Cron mails the output or throws it away. Append >> /tmp/job.log 2>&1 to the command to log it, and use full paths (/usr/bin/php rather than php) because cron's PATH is very short.

Why does % break my crontab command?

In crontab, % means a newline, so a command such as date +%Y gets cut off. Escape it as \% or move the command into a script file.

Ratings and comments

Loading…