Cron · Special characters · Reference
Cron Special Characters Explained
Updated: May 2026
Cron expressions get their power from a small set of special characters. Four are universal; a handful more belong to the Quartz scheduler and are not understood by standard Unix cron. Knowing which is which saves a lot of debugging.
Instant validation and plain-English meaning · No upload
The four standard characters
| Char | Name | Meaning & example |
|---|---|---|
* | Asterisk | Every value. * * * * * = every minute. |
, | Comma | A list of values. 0 9,12,17 * * * = at 9am, 12pm and 5pm. |
- | Hyphen | A range. 0 9-17 * * * = every hour from 9am to 5pm. |
/ | Slash | A step within a range. */10 * * * * = every 10 minutes. |
These four work in virtually every cron implementation and cover the vast majority of schedules. They also combine: 0 8-18/2 * * 1-5 means every two hours from 8am to 6pm, Monday to Friday.
Quartz extensions (not standard cron)
| Char | Meaning & example |
|---|---|
? | No specific value. Used in day-of-month or day-of-week when the other is set: 0 0 12 * ?. |
L | Last. 0 0 L * ? = last day of the month; 0 0 * * 6L = last Friday. |
W | Nearest weekday. 0 0 15W * ? = the weekday closest to the 15th. |
# | Nth weekday. 0 0 * * 6#3 = the third Friday of the month. |
These belong to Quartz, Spring and similar JVM schedulers, which use a 6- or 7-field format including seconds. Plain Linux cron (Vixie, cronie) will reject ?, L, W and #, so do not use them in a system crontab.
Names as values
The month and day-of-week fields also accept three-letter names: JAN–DEC and SUN–SAT. They are case-insensitive and can appear in ranges, so 0 9 * * MON-FRI and 0 0 1 JAN,JUL * are valid. Names cannot be used with steps in some parsers, so when in doubt, fall back to numbers.
Check before you ship
If you are unsure whether a character is supported, paste the expression into the generator. It validates the syntax, rejects malformed fields, and shows the next run times so you can verify the behaviour matches your intent — before a silent failure on the server.
Frequently asked questions
Can I use ? in Linux crontab?
No. The ? is a Quartz feature. In standard cron, use * for the unspecified field.
How do I run on the last day of the month without L?
Schedule for the first of the next month, or run daily and check inside the script whether tomorrow is a new month.
Does the slash always pair with a range?
Conceptually yes. */5 is shorthand for 0-59/5. You can also write explicit ranges like 10-50/10.