Scheduling processes using Crontab (CronJob)


Reading time: 30 minutes | Coding time: 5 minutes

A crontab is an open source utility tool supported in Linux like operating systems. Its main task is to schedule the execution of programs written in file. It is also commonly known as cronjob.

Note: Everything in Linux is treated as a file.

Thus, following things can be scheduled using Crontab:

  1. System commands like ls, cd, mkdir etc.
  2. System updated commands like:
sudo apt-get update && sudo apt-get upgrade
  1. Shell scripts files etc.

Syntax

min hour dom month dow cmd
  • min: minute of executing which ranges from 0-59
  • hour: Hour of execution which ranges from 0-23
  • dom: Day of the month which ranges from 1-31
  • month: Month of the year ranges from 1-12
  • dow: Day of the week which ranges from 0-6 where 0 denotes Sunday.
  • cmd: Command to be executed

Except for the command to be executed, rest of the five parameters can be replaced with the character * which means for all.
Example: Specifying the first field, minutes, as * means the command will execute every minute.

Options

Syntax for Crontab on command line:

crontab -[options]

Following options are provided:

-l: This option is used to display content in the crontab

crontab -l

l

-u: -u command is used to replace/tweak crontab for the user with another file.

crontab -u {username} {absolute_path_to_file}

u

  • Crontab -l displays the crontab has only one line
  • The -u command replaces the crontab with root user's etc/crontab file which contains system crontab file
  • crontab -l displays the new crontab file content.

-e: option is used to edit the crontab file.
It opens the crontab file in a text editor which can be modified and saved.

crontab -e

e

Here, crontab file is opened in the nano editor.

-r: Removes the crontab file for the current user.

crontab -r

r

  • crontab -l is used to display contents of the crontab.
  • crontab -r removes the crontab file
  • crontab -l displays the message no crontab file available.

Description

Every user has their own crontab file consisting of multiple scheduled tasks.
The crontab file for each user exists in the /var/spool/crontab directory with crontab file name same as the user name.

var

On viewing the crontab file using a text editor, we see the following:

varcron

In the crontab file:

  • Line starting with # are comments and are not executed by the Shell
  • Last two lines are the only lines that are not comments. These specify crontab schedules for two files.

Apart from crontab files for each user, crontab files can also be placed in the /etc folder.

etc

It consists of the following files for crontab:

1. cron.hourly: Executes the specified programs every hour at 0th minute

0 * * * * cmd

2. cron.daily: Executes the specified programs every day at 00:00.

0 0 * * * cmd

3. cron.weekly: Executes the specified programs every sunday at 00:00.

0 0 * * 0 cmd

4. cron.monthly: Executes the specified programs on 1st day of every month at 00:00

0 0 1 * * cmd

5. crontab: System command crontab for system scheduled tasks.
Note: It must not be changed as it handles system tasks.

etcron

6. cron.d: It contains the list of commands specified by the root user that cannot be scheduled by a user using crontab and also stores the system crontabs.

Extensions

As seen in the /etc folders, the system provides us to place files in special cron files which execute monthly, daily etc.
We can also define such schedules in the main crontab file using extensions prefixed by @ symbol.

extensions

Following extensions are provided:

1. reboot: execute task every time the system boots up.
2. hourly: execute task every hour at 0th minute
3. daily: execute task every day at 00:00
4. weekly: execute task every week on Sunday at 00:00
5. monthly: execute task every month on 1st day at 00:00
6. yearly or annualy: execute task every year on 1st January at 00:00

References/Further Reading

Linux Manual for Crontab Scheduler

Crontab(5) Implementation