Cron expression parser and explainer

Translate a five-field cron expression or crontab line into plain English and list its next run times after any start date and time, in UTC.

업데이트 검증한 예제: 7

minute hour day-of-month month day-of-week, e.g. 30 2 * * 1 — or @hourly, @daily, @weekly, @monthly, @yearly.
= 2026-09-29
Runs are listed strictly after this moment.
추가 옵션
시도하기
Next run
Tue 2026-09-29 09:00 UTC
Next run: Tue 2026-09-29 09:00 UTC
In plain English
Every 15 minutes, during hours 09 through 17, on Monday through Friday
Upcoming runs
Tue 2026-09-29 09:00 UTC Tue 2026-09-29 09:15 UTC Tue 2026-09-29 09:30 UTC Tue 2026-09-29 09:45 UTC Tue 2026-09-29 10:00 UTC Tue 2026-09-29 10:15 UTC Tue 2026-09-29 10:30 UTC Tue 2026-09-29 10:45 UTC Tue 2026-09-29 11:00 UTC Tue 2026-09-29 11:15 UTC
Time until the next run
9 h
Runs on each matching day
36
Times are UTC. A cron daemon uses its server's time zone (or CRON_TZ), so shift these if the server isn't on UTC.

Every 15 minutes, during hours 09 through 17, on Monday through Friday. The next run after the start is Tue 2026-09-29 09:00 UTC, followed by Tue 2026-09-29 09:15 UTC.

Next runs

09:002026-09-2909:152026-09-2909:302026-09-2909:452026-09-2910:002026-09-2910:152026-09-2910:302026-09-2910:452026-09-2911:002026-09-2911:152026-09-29
Upcoming runs (UTC) 행 수: 10
#Run
1Tue 2026-09-29 09:00 UTC
2Tue 2026-09-29 09:15 UTC
3Tue 2026-09-29 09:30 UTC
4Tue 2026-09-29 09:45 UTC
5Tue 2026-09-29 10:00 UTC
6Tue 2026-09-29 10:15 UTC
7Tue 2026-09-29 10:30 UTC
8Tue 2026-09-29 10:45 UTC
9Tue 2026-09-29 11:00 UTC
10Tue 2026-09-29 11:15 UTC
계산 방법 S
  1. Minute: */15

    4 values: 0, 15, 30, 45.

  2. Hour: 9-17

    9 values: 9, 10, 11, 12, 13, 14, 15, 16, 17.

  3. Day of month: *

    Every day of month.

  4. Month: *

    Every month.

  5. Day of week: MON-FRI

    5 values: Mon, Tue, Wed, Thu, Fri.

  6. Combine the two day fields

    At least one day field starts with *, so a day must match both (with * matching everything).

  7. Scan forward

    Starting after 2026-09-29 00:00 UTC, check each day, then each matching hour and minute, until 10 runs are found.

Cron expression parser and explainer 소개

A cron expression has five fields: minute (0–59), hour (0–23), day of month (1–31), month (1–12 or JAN–DEC) and day of week (0–7 or SUN–SAT, where 0 and 7 both mean Sunday). Each field takes a single value, a comma-separated list, a range with a hyphen or a step with a slash. The parser expands every field into its set of values, then scans forward day by day for the minutes that match all five.

The default, */15 9-17 * * MON-FRI, runs every 15 minutes from 09:00 to 17:45 on weekdays, which is 36 runs on each matching day. Started at midnight on Thursday 15 January 2026, its first run is 09:00 that morning.

When day of month and day of week are both restricted, cron runs on days that match either one, as crontab(5) specifies. Times here are UTC; a cron daemon uses its server's time zone, or CRON_TZ in cronie.

계산 예제

Every 15 minutes in office hours

크론 표현식
*/15 9-17 * * MON-FRI
Start date (UTC)
2026-01-15
Start time (UTC)
00:00
Next run
Thu 2026-01-15 09:00 UTC
Upcoming runs
Thu 2026-01-15 09:00 UTC Thu 2026-01-15 09:15 UTC Thu 2026-01-15 09:30 UTC Thu 2026-01-15 09:45 UTC Thu 2026-01-15 10:00 UTC Thu 2026-01-15 10:15 UTC Thu 2026-01-15 10:30 UTC Thu 2026-01-15 10:45 UTC Thu 2026-01-15 11:00 UTC Thu 2026-01-15 11:15 UTC
Runs on each matching day
36
Time until the next run
9 h

검증 출처: Brute-force Python 3.8 datetime scan minute by minute with an independent field parser; 4 minutes × 9 hours = 36 runs a day; 09:00 − 00:00 = 32400 s

Daily at 09:00, starting exactly at 09:00 (edge)

크론 표현식
0 9 * * *
Start date (UTC)
2026-01-15
Start time (UTC)
09:00
Runs to list
3
Next run
Fri 2026-01-16 09:00 UTC
In plain English
At 09:00, every day
Upcoming runs
Fri 2026-01-16 09:00 UTC Sat 2026-01-17 09:00 UTC Sun 2026-01-18 09:00 UTC

검증 출처: crontab(5): runs are strictly after the start; confirmed by the Python brute-force scan

Leap day only

크론 표현식
0 0 29 2 *
Start date (UTC)
2026-01-15
Start time (UTC)
00:00
Runs to list
3
Next run
Tue 2028-02-29 00:00 UTC
Upcoming runs
Tue 2028-02-29 00:00 UTC Sun 2032-02-29 00:00 UTC Fri 2036-02-29 00:00 UTC

검증 출처: Python 3.8 calendar.isleap and datetime weekday, via the brute-force scan

Day 1 or Monday (both day fields restricted)

크론 표현식
0 12 1 * MON
Start date (UTC)
2026-01-15
Start time (UTC)
00:00
Runs to list
5
Upcoming runs
Mon 2026-01-19 12:00 UTC Mon 2026-01-26 12:00 UTC Sun 2026-02-01 12:00 UTC Mon 2026-02-02 12:00 UTC Mon 2026-02-09 12:00 UTC

검증 출처: crontab(5) OR rule for day-of-month and day-of-week, checked by the Python brute-force scan

자주 묻는 질문

What does */5 mean in a cron expression?

*/5 means every 5th value of the field, counted from the field's first value. In the minute field it fires at minutes 0, 5, 10 … 55, which is 12 times an hour. A step can follow a range too: 10-30/10 gives minutes 10, 20 and 30. Steps restart each hour, so */7 runs at minute 56 and then again at minute 0.

How do I run a cron job every day at midnight?

Write 0 0 * * *, which means minute 0 of hour 0 on every day, or use the @daily macro, which cronie and Vixie cron expand to the same five fields. For 2:30 a.m. every day write 30 2 * * *, and for 09:00 on weekdays write 0 9 * * 1-5. The hour is read in the server's time zone unless the crontab sets CRON_TZ.

How do day of month and day of week combine in cron?

If both fields are restricted, cron runs when either one matches, so 0 12 1 * MON fires at noon on the 1st of every month and on every Monday. In Vixie cron and cronie, a day field that starts with * switches this to both, which is why 0 0 */2 * FRI runs only on Fridays that fall on odd dates such as the 23rd.

Why does my cron expression have 6 or 7 fields?

Standard cron uses 5 fields. Quartz and Spring schedulers put a seconds field in front, making 6, and Quartz accepts an optional year as a 7th, so an expression like 0 0/15 * * * ? belongs to those tools rather than crontab; the ? placeholder is Quartz syntax. This parser reads the 5-field crontab format plus the @hourly, @daily, @weekly, @monthly and @yearly macros.

Can cron run a job every 30 seconds?

Not directly: the smallest unit in a crontab is 1 minute, because the first field is the minute. The usual workaround is two entries, * * * * * job and * * * * * sleep 30; job, which start the job at 0 and 30 seconds past each minute. systemd timers accept OnCalendar schedules down to the second if you need finer control.

“Cron expression parser and explainer”의 정확도는 어느 정도인가요?

정확도는 입력값과 계산 방법의 가정에 따라 달라집니다. 십진 연산은 유효숫자 50자리를 사용하지만, 추정값·수치해석 방법·원본 데이터의 정밀도는 더 낮을 수 있습니다. 표시값을 반올림해도 이러한 한계는 사라지지 않습니다. 독립적인 출처의 풀이와 대조한 계산 예시: 7. 예를 들어 “Every 15 minutes in office hours”은 Brute-force Python 3.8 datetime scan minute by minute with an independent field parser; 4 minutes × 9 hours = 36 runs a day; 09:00 − 00:00 = 32400 s와 대조해 확인합니다.

이 계산 방법의 출처는 무엇인가요?

POSIX.1-2017 (IEEE Std 1003.1) — crontab utility, input file format; crontab(5) — cronie / Vixie cron: ranges, steps, names, @ macros and the day-of-month / day-of-week rule.

이 계산기 소개

run  ⟺  m∈M∧h∈H∧ month∈Mo∧dayday={DOM∨DOWboth≠∗DOM∧DOWotherwise\begin{aligned} \text{run} &\iff m \in M \land h \in H \\ &\qquad \land\ \text{month} \in Mo \land \text{day} \\ \text{day} &= \begin{cases} \text{DOM} \lor \text{DOW} & \text{both} \ne * \\ \text{DOM} \land \text{DOW} & \text{otherwise} \end{cases} \end{aligned}

출처

  1. POSIX.1-2017 (IEEE Std 1003.1) — crontab utility, input file format
  2. crontab(5) — cronie / Vixie cron: ranges, steps, names, @ macros and the day-of-month / day-of-week rule

출처와 대조하여 검증

이 계산기에는 독립적인 출처에서 답을 얻은 계산 예제가 7개 있습니다. 테스트 모음에서 실행되며 여기에서도 실행할 수 있습니다.

관련 계산기