If you use Linux or Unix systems, you’ll eventually come across the term “cron job.” Whether you’re scheduling automatic backups, clearing log files, sending emails, or running maintenance scripts, cron helps automate repetitive tasks without manual intervention.
So, what is a cron job? Simply put, a cron job is a scheduled task that runs automatically at a specified time or interval. Instead of remembering to execute commands every day or every week, you can let the operating system handle them for you.
In this guide, you’ll learn how cron works, understand crontab syntax explained, discover how to read cron expressions, compare cron vs crontab vs cron daemon, and learn how to list, edit, and delete cron jobs with practical examples.
What Is a Cron Job?
A cron job is an automated task scheduled to run at specific times or intervals on Linux and Unix-based operating systems. It allows users and system administrators to automate repetitive commands, scripts, or programs without requiring manual execution.
Cron jobs run in the background according to schedules defined in a configuration file known as a crontab.
For example, you can schedule a cron job to:
- Back up your database every night
- Delete temporary files every Sunday
- Send automated reports every Monday morning
- Renew SSL certificates before they expire
- Monitor server health every five minutes
A simple example is scheduling a backup script every day at 2:00 AM:
0 2 * * * /home/user/scripts/backup.sh
This command tells Linux to execute the backup script daily at 2:00 AM.
How Does Cron Work?
The cron daemon (crond) runs continuously in the background and checks scheduled tasks every minute.
The process involves three main components:
- Cron daemon (crond): The background service responsible for running scheduled tasks.
- Crontab: The configuration file containing scheduled jobs.
- System clock: Determines when a scheduled task should execute.
The workflow is straightforward:
System Time
↓
Cron Daemon (crond)
↓
Checks Crontab
↓
Runs Scheduled Command
Every minute, the cron daemon compares the current system time with entries in the crontab. When a schedule matches, it executes the associated command automatically.
Cron vs Crontab vs Cron Daemon
Many beginners confuse these three terms, but each serves a different purpose.
| Term | Purpose | Example |
| Cron | Overall scheduling system | Executes automated tasks |
| Crontab | File that stores scheduled jobs | User’s cron schedule |
| Cron Daemon (crond) | Background service that runs jobs | Continuously checks schedules |
Think of it this way:
- Cron is the scheduling system.
- Crontab contains the instructions.
- Cron daemon is the worker that carries out those instructions.
Understanding the difference between cron, crontab, and cron daemon makes Linux task scheduling much easier.
Crontab Syntax Explained
A cron schedule consists of five timing fields followed by the command to execute.
* * * * * command_to_run
The five fields specify when the command should run, while the command at the end specifies what should be executed.
| Field | Allowed Values | Meaning |
| Minute | 0-59 | Minute of the hour |
| Hour | 0-23 | Hour of the day |
| Day of Month | 1-31 | Calendar day |
| Month | 1-12 or Jan-Dec | Month of the year |
| Day of Week | 0-7 or Sun-Sat | Day of the week |
The command comes immediately after these timing fields.
For example:
30 3 * * * /home/user/cleanup.sh
This runs the cleanup script every day at 3:30 AM.
How to Read Cron Expressions
Understanding cron expressions becomes easier once you know what the symbols represent.
Asterisk (*)
Matches every possible value.
Example:
* * * * *
Runs every minute.
Comma (,)
Specifies multiple values.
Example:
0 9,17 * * *
Runs at 9:00 AM and 5:00 PM daily.
Hyphen (-)
Specifies a range.
Example:
0 8 * * 1-5
Runs at 8:00 AM Monday through Friday.
Slash (/)
Specifies intervals.
Example:
*/15 * * * *
Runs every 15 minutes.
Common Cron Expression Examples
1. 0 2 * * *
Runs every day at 2:00 AM.
2. */10 * * * *
Runs every 10 minutes.
3. 30 8 * * 1-5
Runs at 8:30 AM every weekday.
4. 0 0 1 * *
Runs at midnight on the first day of every month.
Once you understand these symbols and examples, reading and writing cron expressions becomes much easier.
Common Cron Job Examples
Here are some commonly used cron schedules.
| Cron Expression | What It Does |
| * * * * * | Every minute |
| 0 * * * * | Every hour |
| 0 0 * * * | Every day at midnight |
| 0 0 * * 0 | Every Sunday |
| 0 9 * * 1-5 | Every weekday at 9 AM |
| */15 * * * * | Every 15 minutes |
| 0 1 1 * * | Monthly backup on the first day |
These examples cover many common server maintenance and automation tasks.
How to Create a Cron Job
Creating a cron job is simple.
Open your crontab by running:
crontab -e
Then:
- Open the editor.
- Add your cron schedule.
- Save the file.
- Exit the editor.
The cron daemon automatically reloads the updated schedule.
Example:
0 6 * * * /home/user/scripts/report.sh
This command runs the report script every day at 6:00 AM.
How to List, Edit, and Delete Cron Jobs
Managing cron jobs is straightforward using built-in commands.
1. List cron jobs
To display all scheduled jobs for the current user:
crontab -l
2. Edit cron jobs
To modify existing schedules:
crontab -e
3. Remove all cron jobs
To delete every cron job associated with your account:
crontab -r
Use this command carefully because it permanently removes all scheduled tasks.
Knowing how to list, edit, and delete cron jobs is essential for maintaining an organized automation environment.
Where Cron Jobs Are Stored
Cron jobs can be stored in user-specific or system-wide locations.
User Crontab
The location of user crontab files varies by Linux distribution. On many systems, they are stored under:
/var/spool/cron
System Crontab
System-wide scheduled tasks are managed through:
/etc/crontab
Scheduled Directories
Linux also provides predefined directories for recurring jobs:
/etc/cron.hourly
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly
Scripts placed in these directories run automatically according to their designated schedule.
Common Uses of Cron Jobs
Cron is widely used for automating system administration tasks.
Common use cases include:
- Database backups
- Log file cleanup
- Automated email reports
- Security scans
- SSL certificate renewal
- Cache clearing
- Report generation
- File synchronization
- Software updates
- Monitoring server performance
Automating these tasks reduces manual effort and improves system reliability.
Common Cron Job Mistakes
Although cron is powerful, a few common mistakes can prevent jobs from running successfully.
- Using incorrect syntax in cron expressions.
- Missing executable permissions on scripts.
- Using relative paths instead of absolute paths.
- Ignoring time zone settings on the server.
- Assuming environment variables are available by default.
- Not logging output makes troubleshooting difficult.
- Silent failures caused by missing dependencies or incorrect permissions.
Carefully testing jobs before deployment helps avoid these issues.
Cron Job Best Practices
Follow these best practices to create reliable cron jobs:
- Test commands manually before scheduling them.
- Always use absolute file paths.
- Redirect output to log files for easier debugging.
- Add comments to describe scheduled tasks.
- Avoid overlapping jobs that could compete for resources.
- Review and remove outdated cron entries regularly.
- Use the least privileged user account whenever possible.
- Monitor logs to confirm scheduled tasks are running as expected.
These practices improve maintainability and reduce unexpected failures.
Frequently Asked Questions
Yes. You can run multiple commands in one cron job by separating them with && , ; , or by calling a shell script that contains all the commands. Using a shell script is generally the cleaner and more maintainable approach for complex tasks.
Cron jobs do not run while the system is powered off. After the system restarts, the cron daemon resumes checking scheduled tasks according to the current time. Jobs scheduled during downtime are typically skipped unless you’re using a scheduler designed to catch up on missed executions, such as Anacron.
Yes. Each Linux user can maintain a separate crontab file with their own scheduled tasks. This allows users to automate personal scripts without affecting system-wide cron jobs managed by the administrator.
You can temporarily disable a cron job by placing a # at the beginning of the corresponding line in the crontab file. This comments out the entry, preventing it from running while preserving it for future use.
Anacron is a task scheduler designed for systems that are not always running, such as laptops or personal computers. Unlike cron, which only runs tasks at their scheduled time, Anacron can execute missed jobs after the system powers back on, making it better suited for intermittent-use systems.