If you’ve ever needed something to run automatically in Linux, this is where most people get stuck.
The good news is this is simpler than it looks.
In this guide, you’ll learn how to schedule tasks using cron, step by step, with real examples you can actually use.
What You’re Doing (In Plain Terms)
You’re telling Linux:
Run this command at a specific time, automatically.
That’s it.
Linux uses something called a cron job to do this. Think of it as a built-in scheduler that runs commands for you in the background.
Step 1: Open Your Scheduler
To get started, open your crontab (your personal task list):
crontab -e
If this is your first time, you may see:
no crontab for user - using an empty oneSelect an editor...
Choose:
1
This selects nano, which is simple and beginner-friendly.
What’s happening
You’re not running anything yet. You’re opening the place where your scheduled tasks will live.
Real-world use
This is how system administrators schedule things like nightly backups without logging in.
Step 2: Understand the Cron Format
Every cron job follows this structure:
* * * * * command
Each star represents time:
minute hour day month day-of-week
At first, this looks confusing. Keep it simple. You only need to change what matters.
Step 3: Create Your First Scheduled Task
Let’s start with something simple.
Add this line inside your crontab:
* * * * * echo "Hello from cron" >> ~/cron-test.txt
Then save and exit:
CTRL + XYEnter
What this does
• * * * * * runs every minute
• echo "Hello from cron" prints text
• >> adds it to a file (without overwriting)
• ~/cron-test.txt is where it gets saved
Step 4: Verify It Works
Wait about one minute, then run:
cat ~/cron-test.txt
You should see something like:
Hello from cronHello from cronHello from cron
What this means
Each line represents one run of your scheduled task.
If it’s adding lines over time, it’s working.
Real-world use
This same setup can be used for:
• Logging activity
• Running scripts
• Monitoring systems
Step 5: Schedule a Specific Time
Now let’s make it practical.
Run a task every day at 2:30 AM:
30 2 * * * echo "Daily task ran" >> ~/daily-log.txt
What changed
• 30 = minute
• 2 = hour
• * * * = every day
So this runs once per day at 2:30 AM.
Real-world use
This is commonly used for:
• Nightly backups
• Log cleanup
• System updates
Step 6: View Your Scheduled Jobs
To see everything you’ve scheduled:
crontab -l
Example output:
* * * * * echo "Hello from cron" >> ~/cron-test.txt30 2 * * * echo "Daily task ran" >> ~/daily-log.txt
This shows your full list of automated tasks.
Step 7: Edit or Remove Jobs
To edit your tasks:
crontab -e
To remove everything:
crontab -r
Be careful with this.
There is no confirmation. Once it’s gone, it’s gone.
Common Mistakes (And How to Avoid Them)
1. Nothing is happening
Cron runs in a limited environment.
If your command fails, try using full paths:
/usr/bin/echo "Hello" >> /home/username/test.txt
2. File is not updating
Check two things:
• You used >> instead of >
• You saved the file before exiting
3. Permission issues
If your task needs elevated access, it won’t run as your normal user.
Use root’s crontab:
sudo crontab -e
Real-World Example: Automating Backups
Let’s say you have a script:
/home/user/backup.sh
You want it to run every night at midnight.
Add this:
0 0 * * * /home/user/backup.sh
What happens
Every night at midnight, Linux runs that script automatically.
No login. No manual steps.
Why this matters
This is how real systems stay consistent.
Backups, updates, and monitoring all rely on automation like this.
Small Next Step: Capture Errors
Once you’re comfortable, improve your jobs by capturing errors.
* * * * * echo "Hello" >> ~/cron-test.txt 2>&1
What this does
2>&1 sends errors to the same place as normal output.
This helps you troubleshoot when something doesn’t work.
Final Thoughts
This may feel unfamiliar at first, but it becomes straightforward with repetition.
Start simple. Run a task every minute. Then move to real schedules like daily or weekly jobs.
Once this clicks, cron becomes one of the most useful tools you have in Linux.