Introduction

This tutorial covers cron jobs crontab format crontab commands.

Cron service - Repeat a task

If you need to repeat a task on a schedule, you can use the cron service. The cron service is a time based job scheduling system that starts when the system boots. Every minute the cron service checks whether any scheduled jobs to run, and if so, it runs them.

Cron jobs are often used to automate a process or perform routine maintenance. You can schedule cron jobs by using the crontab command.

Crontab format

A Crontab or Crontable is a configuration file that specifies when commands are to be executed by Cron.

Each line in a Crontab represents a job and contains two pieces of information:

  • 1 - when to run?
  • 2 - what to run?

The following displays what Crontab consists of:

* * * * * 
| | | | | 
| | | | +---- Day of the Week   (range: 0-6, 1 standing for Monday)
| | | +------ Month of the Year (range: 1-12)
| | +-------- Day of the Month  (range: 1-31)
| +---------- Hour              (range: 0-23)
+------------ Minute            (range: 0-59)

The time specification consists of six fields. They are Minute, Hours, Day of the Month, Month, and Day of the Week. After the time specification, you provide the command to be executed.

Any field may contain a list of values separated by commas, (e.g. 1,3,7) or a range of values (two integers separated by a hyphen, e.g. 1-5).

After an asterisk (*) or a range of values, you can use character / to specify that values are repeated over and over with a certain interval between them. For example, you can write "0-23/2" in Hour field to specify that some action should be performed every two hours (it will have the same effect as "0,2,4,6,8,10,12,14,16,18,20,22"); value "*/4" in Minute field means that the action should be performed every 4 minutes, "1-30/3" means the same as "1,4,7,10,13,16,19,22,25,28".

In Month and Day of Week fields, you can use names of months or days of weeks abbreviated to first three letters ("Jan,Feb,...,Dec" or "Mon,Tue,...,Sun") instead of their numeric values.

Examples

Example 1 - Simple Crontab

This example runs at 7am on every Monday

# Run at 07:00 on every Monday
0 7 * * 1 * /var/webapps/bin/weekly-sales

This job will run only when the minute is 0, the hour is 7, and the day of week is 1 (Monday).

Note: 0 represents Sunday.

The command will only be executed when all the time specification fields match the current date and time. You can specify that a command be run only once, but this is not the typical use case for Cron.

Typically, one or more of the time specification fields will contain an asterisk or a start (*) which matches any time or date for that field.

Example 2 - Crontab with redirecting output

If any output is generated by the command in Cron job, e.g. it is sending email to you.

You can check your local mail with the mail command. If you prefer not to get email, you can redirect output of the command as in the following example:

0 2 * * * * /root/send-email > /tmp/mail.log 2>&1
Example 3 - time fields

Here are more examples about the time fields

 * * * * * *                         Each minute
 59 23 31 12 5 *                     One minute  before the end of year if the last day of the year is Friday
 
 59 23 31 DEC Fri *                  Same as above (different notation)
 45 17 7 6 * *                       Every  year, on June 7th at 17:45
 45 17 7 6 * 2001,2002               Once a   year, on June 7th at 17:45, if the year is 2001 or  2002
 0,15,30,45 0,6,12,18 1,15,31 * 1-5 *  At 00:00, 00:15, 00:30, 00:45, 06:00, 06:15, 06:30,
                                     06:45, 12:00, 12:15, 12:30, 12:45, 18:00, 18:15,
                                     18:30, 18:45, on 1st, 15th or  31st of each  month, but not on weekends
 */15 */6 1,15,31 * 1-5 *            Same as above (different notation)
 0 12 * * 1-5 * (0 12 * * Mon-Fri *) At midday on weekdays
 * * * 1,3,5,7,9,11 * *              Each minute in January,  March,  May, July, September, and November
 1,2,3,5,20-25,30-35,59 23 31 12 * * On the  last day of year, at 23:01, 23:02, 23:03, 23:05,
                                     23:20, 23:21, 23:22, 23:23, 23:24, 23:25, 23:30,
                                     23:31, 23:32, 23:33, 23:34, 23:35, 23:59
 0 9 1-7 * 1 *                       First Monday of each month, at 9 a.m.
 0 0 1 * * *                         At midnight, on the first day of each month
 * 0-11 * * *                        Each minute before midday
 * * * 1,2,3 * *                     Each minute in January, February or March
 * * * Jan,Feb,Mar * *               Same as above (different notation)
 0 0 * * * *                         Daily at midnight
 0 0 * * 3 *                         Each Wednesday at midnight    

Using the crontab command

The crontab command manipulates cron jobs. You can use crontab file to install the new crontab from the contents of that file. To list your jobs, run crontab -l. To edit them use crontab -e. Note that the edit command will invoke the editor that is specified in the editor environment variable. The crontab -r will remove all of your cron jobs.

Commands Meaning
crontab file Install a new crontab from file.
crontab -l List your cron jobs.
crontab -e Edit your cron jobs.
crontab -r Remove all of your cron jobs.

Examples

Example 4: List your cron jobs

To list your cron jobs

$ crontab -l
no crontab for robin

In this case, there is no cron jobs for user robin.

Example 5: Schedule a cron job

Suppose you already have a schedule in a file called test-cron like below:

# Run every Monday at 07:00
0 7 * * 1 * /var/webapps/bin/weekly-sales
~ 
~ 
~ 

To install above file, you can run

$ crontab test-cron

Now, if you list your cron jobs, you will see

$ crontab -l
# Run every Monday at 07:00
0 7 * * 1 * /var/webapps/bin/weekly-sales
Example 6: Edit cron jobs

To set editor environment to vi editor

$ echo $EDITOR
 
EDITOR=vi

Then, you can edit the cron jobs using vi editor by running

$ crontab -e

References & Resources

  • N/A