Introduction
Welcome to the Linux Job Scheduling lab. In this session, you will learn how to automate repetitive tasks in Linux using the crontab utility, a time-based job scheduler in Unix-like operating systems.
Scheduling tasks is a fundamental skill for system administrators and developers. By automating routine operations, you can enhance efficiency, ensure reliability, and reduce manual intervention. The crontab utility allows you to schedule commands to run at specified intervals, from minutes to months.
Throughout this lab, you will learn to create, manage, and monitor scheduled tasks using crontab. By the end, you will have the skills to implement automated task scheduling in your own Linux environment.
Understanding Crontab and Creating Your First Scheduled Task
Crontab (Cron Table) is a utility in Linux that allows users to schedule tasks to run automatically at specified times. These scheduled tasks are called "cron jobs."
Crontab Syntax
The basic syntax of a cron job follows this format:
* * * * * command_to_execute
Each asterisk represents a different time unit:
- Minute (0-59)
- Hour (0-23)
- Day of the month (1-31)
- Month (1-12)
- Day of the week (0-6, where 0 is Sunday)
For example, to run a command every day at 2:30 PM, you would use:
30 14 * * * command_to_execute
Creating Your First Cron Job
Let's create a simple cron job that will record the current date and time every minute. This will help you understand how cron jobs work.
First, make sure you are in the right directory:
cd ~/project
Now, let's create an empty log file where our cron job will write the date and time:
touch ~/project/date_log.txt
Next, open the crontab editor with the following command:
crontab -e
If this is your first time using crontab, you might be prompted to select an editor. Choose your preferred option (nano is recommended for beginners).
In the editor, add the following line at the end of the file:
* * * * * date >> ~/project/date_log.txt
Save and exit the editor:
- If you are using nano, press
Ctrl+Oto save, then pressEnterto confirm, and finally pressCtrl+Xto exit. - If you are using vim, press
Esc, then type:wqand pressEnter.
This cron job will add the current date and time to the date_log.txt file every minute. Wait for at least one minute, then check if your cron job is working:
cat ~/project/date_log.txt
You should see output similar to this:
Tue Feb 15 14:32:01 UTC 2023
If you wait longer and run the command again, you should see multiple entries with timestamps approximately one minute apart, confirming that your cron job is running correctly.
Managing and Modifying Cron Jobs
Now that you have created your first cron job, let's learn how to view, modify, and manage your scheduled tasks.
Viewing Current Cron Jobs
To view your current cron jobs, use the following command:
crontab -l
This command will display all the cron jobs currently scheduled for your user. You should see the job you created in the previous step:
* * * * * date >> ~/project/date_log.txt
Understanding Cron Job Scheduling Patterns
Before modifying our job, let's understand some common scheduling patterns:
* * * * *- Run every minute*/5 * * * *- Run every 5 minutes0 * * * *- Run at the beginning of every hour0 0 * * *- Run at midnight every day0 0 * * 0- Run at midnight every Sunday
Modifying a Cron Job
Let's modify the existing cron job to run every 5 minutes instead of every minute. To do this, open the crontab editor:
crontab -e
Find the line you added in the previous step:
* * * * * date >> ~/project/date_log.txt
Change it to:
*/5 * * * * date >> ~/project/date_log.txt
The */5 in the first position means "every 5 minutes." Save and exit the editor using the same method as before (Ctrl+O, Enter, Ctrl+X for nano).
To verify the changes, view your crontab again:
crontab -l
You should see the updated cron job. The output will be:
*/5 * * * * date >> ~/project/date_log.txt
If you check your log file again after waiting for 5 minutes:
cat ~/project/date_log.txt
You should notice that new entries are now being added every 5 minutes instead of every minute.
Benefits of Modifying Job Frequency
Running jobs at appropriate intervals helps optimize system resources. Very frequent jobs (like every minute) may cause unnecessary system load, while less frequent schedules (like every 5 minutes) often provide a better balance between timeliness and efficiency for monitoring tasks.
Creating More Advanced Cron Jobs
Now that you understand the basics, let's create a more advanced cron job that logs system information.
Creating a System Information Logging Job
Let's create a cron job that will log information about the system's memory usage every hour. This type of monitoring can be useful for tracking system performance over time.
First, let's create a shell script that will collect the memory information:
nano ~/project/memory_check.sh
In the nano editor, add the following content:
#!/bin/bash
echo "Memory check at $(date)" >> ~/project/memory_log.txt
free -m >> ~/project/memory_log.txt
echo "--------------------" >> ~/project/memory_log.txt
This script will:
- Add a timestamp to the log
- Run the
free -mcommand to display memory usage in megabytes - Add a separator line for readability
Save and exit the editor (press Ctrl+O, Enter, then Ctrl+X).
Now, make the script executable:
chmod +x ~/project/memory_check.sh
You can test the script to ensure it works correctly:
~/project/memory_check.sh
Check the output file:
cat ~/project/memory_log.txt
You should see output that includes the timestamp, memory usage information, and a separator line.
Now, let's schedule this script to run hourly using crontab:
crontab -e
Add the following line (while keeping your existing cron job):
0 * * * * ~/project/memory_check.sh
This will run the memory check script at the beginning of every hour. Save and exit the editor.
To verify the new cron job has been added:
crontab -l
You should see both cron jobs:
*/5 * * * * date >> ~/project/date_log.txt
0 * * * * ~/project/memory_check.sh
Using Special Time Strings
Cron also supports some special time strings for common scheduling patterns:
@hourly- Same as0 * * * *@daily- Same as0 0 * * *@weekly- Same as0 0 * * 0@monthly- Same as0 0 1 * *@reboot- Run at system startup
Let's add a job that runs daily using these special strings:
crontab -e
Add the following line:
@daily echo "Daily check on $(date)" >> ~/project/daily_check.txt
Save and exit the editor. This will create a new entry in the daily_check.txt file once per day at midnight.
To verify the new cron job has been added:
crontab -l
You should now see all three cron jobs:
*/5 * * * * date >> ~/project/date_log.txt
0 * * * * ~/project/memory_check.sh
@daily echo "Daily check on $(date)" >> ~/project/daily_check.txt
Managing Cron Job Output
By default, cron sends any output from jobs to the user's email. If you want to discard the output completely, you can redirect it to /dev/null:
*/10 * * * * ~/project/some_script.sh > /dev/null 2>&1
This is a common practice for scripts that produce output you don't need to keep.
Summary
Congratulations on completing the Linux Job Scheduling lab. You have now learned how to use the crontab utility to automate tasks in Linux.
Throughout this lab, you've accomplished the following:
- Created a basic cron job to log date and time at regular intervals
- Learned the crontab syntax and the meaning of time fields (minute, hour, day, month, weekday)
- Modified existing cron jobs to change their execution frequency
- Created a shell script for system monitoring and scheduled it to run hourly
- Used special time strings like
@dailyfor common scheduling patterns - Learned how to manage the output of cron jobs
These skills are essential for any Linux user or system administrator. With crontab, you can automate routine tasks such as:
- System maintenance and cleanup
- Data backup and synchronization
- Log rotation and management
- Regular health checks and monitoring
- Scheduled reporting
By implementing effective job scheduling, you can increase system reliability, reduce manual intervention, and optimize your workflow. Remember to always test your cron jobs thoroughly and consider the impact of scheduled tasks on system performance.
Continue to explore the capabilities of crontab and other Linux scheduling tools to further enhance your automation skills.



