A cron expression is a string of five distinct fields separated by spaces, used to define the exact schedule for a cron job to execute. While the cron daemon handles the background processing, the expression acts as the configuration map, telling the system exactly when—down to the minute—to run your script or command.
In the world of Unix and Linux systems, this syntax is the standard for time-based scheduling. Whether you are automating database backups, clearing cache, or triggering a newsletter, the schedule relies entirely on the accuracy of these five characters.
The Anatomy of the Five Fields
A standard cron expression consists of five asterisks by default: * * * * *.
Each position in this string represents a specific unit of time. The system reads the expression from left to right. For the schedule to be valid, you must define values (or wildcards) for all five positions.
Here is the breakdown of the hierarchy:
| Position | Field | Allowed Values |
| 1 | Minute | 0 – 59 |
| 2 | Hour | 0 – 23 |
| 3 | Day of Month | 1 – 31 |
| 4 | Month | 1 – 12 |
| 5 | Day of Week | 0 – 6 (Sunday is 0) |
Note: In some extended versions of cron (like Quartz for Java), there is a 6th field for “Seconds,” but standard Linux cron relies on the 5-field structure defined above.
When this expression is placed inside a crontab, it tells the server: “Check this pattern every minute, and if the current time matches the pattern, run the command.”
Understanding Special Characters and Operators
While you can use specific numbers (e.g., 5 in the minute field for “5 minutes past the hour”), cron expressions become powerful when you use operators to define logic.
The Wildcard (*)
The asterisk represents “all values.”
- If used in the “Hour” field, it means “every hour.”
- If used in the “Month” field, it means “every month.”
The Step Value (/)
The forward slash defines intervals or increments. This is essentially “every X units.”
- Example:
*/15in the minute field means “every 15 minutes” (0, 15, 30, 45).
The List Separator (,)
The comma allows you to list multiple distinct values without a pattern.
- Example:
1,15in the Day of Month field means the job runs on the 1st and the 15th of the month.
The Range (-)
The hyphen defines a continuous range of time.
- Example:
9-17in the Hour field means “every hour from 9 AM to 5 PM.”
Real World Cron Job Syntax Examples
Understanding the theory is helpful, but seeing practical examples is usually how you solve the immediate problem. Here are the most common configurations used in backend development.
High-Frequency Schedules
Cron job every minute
This is the most aggressive schedule possible in standard cron.
* * * * *
Cron every 5 minutes
Note the use of the step operator.
*/5 * * * *
Hourly and Daily Schedules
Cron every 2 hours
A common mistake here is using * in the minute field, which would cause the job to run every minute of every second hour. You must set the minute to 0 to run it once at the top of the hour.
0 */2 * * * *
Run at 4:30 AM every day
30 4 * * *
Specific Business Logic
Run only on weekdays at 9 AM
Here we combine a specific time with a range for the “Day of Week.”
0 9 * * 1-5
Run quarterly (on the 1st of every 3rd month)
0 0 1 */3 *
Where the Expression Fits in the Crontab
The cron expression is technically just a parameter. It does not function on its own; it must be placed inside a crontab file (Cron Table). Read more about crontab files here.
The standard syntax within the file looks like this:
[Cron Expression] [User to Run As] [Command to Execute]
For example:
*/10 * * * * root /usr/bin/php /var/www/script.php
If the expression syntax is incorrect, the cron daemon will fail to load the schedule, and your task will never run.
Using a Cron Expression Generator
Writing expressions from memory is good practice, but it is also error-prone. A simple syntax error can result in a database backup running every minute instead of every day.
For safety and speed, most developers use a cron expression builder or cron generator to validate their strings before deploying them.
Tools like crontab.cronhub.io allow you to visually build the schedule and copy the resulting string. This ensures you aren’t accidentally scheduling a resource-heavy job to run 100 times more often than intended.
Summary
The cron expression is a compact, powerful way to handle time-based automation. By mastering the five-field format and understanding how to use step values and ranges, you can automate virtually any maintenance task on your server.
However, setting the schedule is only half the battle. If a cron job fails silently in the background, the expression will keep triggering it, but you might not know the output is failing until it’s too late.
If you are managing critical tasks, consider using a monitoring tool like olic.io to get notified instantly when a job fails or misses its scheduled execution time.