How to schedule a periodic task with cron
cron is a time-based scheduling utility program. With
cron, you can launch routine background jobs at specific times, days, months, etc., on an ongoing basis. The jobs launched are referred to as
cron utility program is driven by a configuration file called
/etc/crontab (cron table), which contains various shell commands that need to be run at scheduled times.
There are two types of
crontab files, the system-wide
crontab files, and the individual user crontab files. Each line of a
crontab file represents a job and is composed of a
cron expression, followed by a shell command to execute.
In this article, you will:
- see some uses of the
- understand the structure of a crontab file, and then
- learn how to schedule a periodic task on Linux with
To follow this article, you need access to a Linux distribution terminal window. This article uses a Linux Ubuntu 22.04 (LTS) x64 distibution.
There are several cases which you, as a Linux user, would want to schedule tasks with
cron; a few of them are:
- To schedule automated updates.
- To back up data at a specific time of the hour, day, month, year, etc.
- And so much more.
Understanding a crontab file
To understand a crontab file, in the terminal window of your Linux machine, run the command below to print out the content of
/etc/crontab configuration file.
$ cat /etc/crontab
After running the command, you will get an output similar to the image below.
The above image is a crontab file. And each line uncommented out with the
# symbol is a
cron job, as you can see in the annotated image below.
There are several sections for each
cron job in the annotated part above, and each section is responsible for a specific aspect of scheduling the job.
Structure of a
To explain the sections in a
cron job, here is the first job on the above crontab file:
17 * * * * root cd / && run-parts --report /etc/cron.hourly
In the above
cron job, the time interval
17 * * * * (a cron expression) means to run at 17 minutes past every hour. And the job is to change into the
/ (the root of the filesystem) directory. Then, as the
root user, run the
run-parts binary to execute all jobs in the
As seen above, in
cron jobs, time intervals are denoted by numbers and operators filled in place of each asterisk. From left to right, the asterisks represent:
- Minute set as a number from 0 to 59.
- Hour set as numbers from 0 to 23.
- Day of the month set a number from 1 to 31.
- Month set as numbers from 1 to 12 OR jan, feb, mar, apr etc.
- Day of the week set as numbers from 0 to 7, with Sunday = (0 or 7) OR sun, mon, tue, wed, thu, fri, sat.
To learn more about cron expressions, see the man page of crontab.
To create and manage
cron jobs, you need to edit the crontab file using the
crontab command — a dedicated command for the crontab system.
To create a
cron job, in the terminal window, run the command below to edit the crontab file:
$ crontab -e
After running the above command, you will be prompted to choose the editor you’d like to use to edit the crontab file, as in the image below.
Press enter to choose the default editor — nano, the easiest to use editor option.
Editing the crontab file to create
After pressing enter, the crontab file of the logged-in user will open up in the nano editor, as in the image below.
The annotated part in the above image
/tmp/crontab.YgyqTN/crontab shows that you are currently editing a temporary file that will become an actual crontab file when saved.
Next, scroll down to the end of the crontab to create a cron job in the line with the blinking cursor (caret) similar to the image below:
Next, you will add a
cron job to the crontab.
cron job to the crontab
For demo purposes, below is a cron job to execute a command at 11:13 AM every day.
13 11 * * * echo "this is a test job" > testfile.txt
The command in the above cron job is to create and write
"this is a test job" to a
After adding a
cron job to a crontab, you use CTRL + O to save the file and then CTRL + X to exit the nano editor, as in the image below.
At the time of writing this article, the time is 11:09 AM:
And when I run the list files command
ls, there is no
But once it reaches or passes the 11:13 AM time, I can see that the
testfile.txt file has been created and written.
cron jobs in a crontab file
cron jobs in the crontab file for the current logged in user, in your terminal, run:
$ crontab -l
After running the above command, you will see the
cron jobs similar to the image below at the tail end of the file.
In this article, you learned about the
cron command-line utility, the crontab file, and how to create
cron jobs to schedule periodic tasks. There is much more you can do in
cron, like running jobs as other users, redirecting cron job messages, etc.
To learn more about
cron, check out the following resources: