I previously wrote a tutorial about managing system processes in ubuntu, where we walked through starting, stopping programs, and the likes.
In some cases, you may need an application to perform a task at a specific time rather than always running in the background, this is where cron comes in. By using Cron, you can schedule a process, script, or program to run at a specific time.
Let's get started...
Each user can create a cron job, which is under a crontab, a crontab includes a list of cron jobs(one per line), also, the root user also has crontabs for system-wide administrative task.
Viewing a Crontab of a user
crontab -l
This will show you a list of jobs for the use that executed the above command, if you executes ut as root (sudo), you'll see root crontabs.
Viewing a Crontab of a Specific User
If you want to view a crontab for a specific user, you can use the -u option e.g
sudo crontab -u James -l
You would see the message no crontab for user if you haven't created a cron job.
Creating a Cron job
To create a cron job, log in to the user you want the task to run under, then execute the following command:
crontab -e
Output:
user@server:~$ crontab -e
no crontab for user - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
4. /bin/ed
Choose 1-4 [1]:
If you have more than one text editor, you may see the above output, I'll go with nano, so, I'll enter 1, you can change it later by running 'select-editor' or by simply running Editor=vim crontab -e, which would take you directly to a text editor.
Once you enter 1, hit enter, and a default crontab file would be opened with some useful info about how cron works, to add a new job, add it at the bottom of the file, each task to run has to be defined through a single line indicating with different fields when the task will be run and what command to run for the task, e.g:
m h dom mon dow command
Each cron job has six fields, each separated by at least one space or tab spaces:
- The first field shows the minute (m) in which the job would occur,
- The second field shows the hour (h) in the 24-hour format (0-23) the job would occur,
- The third field represents the day of the month (dom), if you place 7, that would indicate the 7 of the month
- The fourth field represent the month (mon), if you place 7, that would correspond to july
- The fifth field is the day of the week (dow), starting from 0-6, 0 represent Sunday - 6 (Saturday)
- The last field is the command to be executed
Updating Server Repository Index at 7 Pm Every Friday
* 19 * * 4 /usr/bin/apt-get update
The * asterisk means anytime, so, the above command simply updates the server repo every Friday (4), at 7 pm. You would notice I used the full command path, this is considered best practice. If you don't know what the full command is, you can use the which command.
There are a whole host of other command combos you can try, enjoy!