Cron is a available tool on Linux allowing the implementation of planned tasks in order to automate processions & actions.

Introduction

Each user of a Linux system has a crontab allowing the planned tasks management.
The following command displays the crontab content :

### Crontab empty
crontab -l
no crontab for user

### Crontab with a task
crontab -l
00 * 01 * * root /usr/bin/apt-get update

It is also possible to display the crontab of another user if we have the right.

crontab -u user -l

Or even for all the users :

for user in $(cut -f1 -d: /etc/passwd); do echo $user; crontab -u $user -l; done

It is finally possible to directly consult and edit the contab :

vim /etc/crontab
00 * 01 * * root /usr/bin/apt-get update

Configuration

The crontab is edited from the command :

crontab -e

From the crontab’s view, we can configure some tasks to plan and the repetition cycle of each one.
Each file’s line must follow the following formatting separating with a space at least :

m h dom mon dow user command

Minutes, value between 0 and 59.

Hour, value between 0 and 23.

day of month, value between 1 and 31.

Month, value between 1 and 12.

Day of week, value between 1 and 7.

User’s login to whom cron applies (optional).

Command of the cron task to execute.

Once the at least one tasks are written, we leave and safeguard the crontab (ECHAP then :wq) as in an open file with the editor VIM.
A message of the changes’ consideration is sent back :

crontab -e
crontab: installing new crontab

It can happen that cron crash and in this case, a restart is necessary :

sudo service cron restart

The different meters can be maximized with the characters /, , (decimal point) and .
The month number mon can be replaced by jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov and/or dec.
The day of week number dow can be replaced by mon, tue, wed, thu, fri, sat and/or sun.

### Cron executed every 5 minutes at 10am and 8pm from Monday to Friday
*/5 10,20 * 1-5 * command

Dividing a period.

List periods.

Extend a period.

it is also possible to replace the * * * * * with a preset shortcut : @reboot, @yearly
@annually, @monthly, @weekly, @daily, @midnight, @hourly

Every hour (0 * * * *).

Everyday (0 0 * * *).

At each system start.


Examples

In order to become familiar with the five elements constituting of the cron tasks, here are several concrete examples of use :

### Each March 9th
0 0 9 3 * command
### Each March 9th and Tuesday
0 0 9 3 2 command
### Every minutes of April 3rd from 3pm to 3h59pm
* 15 3 4 * command
### Every 12 months at 2am and 2pm 
0 2,14 12 * * command
### Every 2 months, the 1st of this month at noon and midnight
0 0,12 1 */2 * command
### Every 5 minutes during the first half-hour
0-30/5 * * * * command
### Every 30 minutes
*/30 * * * * command
### Every 30 secondes
* * * * * sleep 30 && command

Resume

In order to keep on having these information to hand, you can preserve them in a file :

# @reboot    : run once, at startup.
# @yearly    : run once a year, “0 0 1 1 *”.
# @annually  : same as @yearly
# @monthly   : run once a month, “0 0 1 * *”.
# @weekly    : run once a week, “0 0 * * 0”.
# @daily     : run once a day, “0 0 * * *”.
# @midnight  : (same as @daily)
# @hourly    : run once an hour, “0 * * * *”.

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

Generator

In order to simply and quickly create cron tasks, you can use the following generator :