Cron is a daemon that can be used to schedule the execution of recurring
tasks according to a combination of the time, day of the month, month,
day of the week, and week.
Cron assumes that the system is on continuously. If the system is not on
when a task is scheduled, it is not executed. To configure tasks based
on time periods instead of exact times, refer to the Section called Anacron. To schedule one-time tasks, refer to
the Section called At and Batch.
The main configuration file for cron, /etc/crontab,
contains the following lines:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly |
The first four lines are variables used to configure the environment in
which the cron tasks are run. The value of the
SHELL variable tells the system which
shell environment to use (in this example the bash shell), and the
PATH variable defines the path used to
execute commands. The output of the cron tasks are emailed to the
username defined with the MAILTO
variable. If the MAILTO variable is
defined as an empty string (MAILTO=""),
email will not be sent. The HOME
variable can be used to set the home directory to use when executing
commands or scripts.
Each line in the /etc/crontab file represents a
task and has the format:
minute hour day month dayofweek command |
minute — any integer from
0 to 59
hour — any integer from 0
to 23
day — any integer from 1
to 31 (must be a valid day if a month is specified)
month — any integer from
1 to 12 (or the short name of the month such as jan, feb, and so
on)
dayofweek — any integer
from 0 to 7 where 0 or 7 represents Sunday (or the short name of the
week such as sun, mon, and so on)
command — the command to
execute. The command can either be a command such as ls
/proc >> /tmp/proc or the command to execute a custom
script that you wrote.
For any of the above values, an asterisk (*) can be used to specify all
valid values. For example, an asterisk for the month value means execute
the command every month within the constraints of the other values.
A hyphen (-) between integers specifies a range of integers. For
example, 1-4 means the integers 1, 2, 3, and 4.
A list of values separated by commas (,) specifies a list. For example,
3, 4, 6, 8 indicates those four specific integers.
The forward slash (/) can be used to specify step values. The value of
an integer can be skipped within a range by following the range with
/<integer>. For
example, 0-59/2 can be used to define every other
minute in the minute field. Step values can also be used with an
asterisk. For instance, the value */3 can be used
in the month field to run the task every third month.
Any lines that begin with a hash mark (#) are comments and are not
processed.
Example 22-1. Examples of crontabs
# record the memory usage of the system every monday
# at 3:30AM in the file /tmp/meminfo
30 3 * * mon cat /proc/meminfo >> /tmp/meminfo
# run custom script the first day of every month at 4:10AM
10 4 1 * * /root/scripts/backup.sh |
As you can see from the /etc/crontab file, it uses
the run-parts script to execute the scripts in the
/etc/cron.hourly,
/etc/cron.daily,
/etc/cron.weekly, and
/etc/cron.monthly directories on an hourly, daily, weekly, or
monthly basis respectively. The files in these directory should be shell
scripts.
If a cron tasks needs to be executed on a schedule other than hourly,
daily, weekly, or monthly, it can be added to the
/etc/cron.d directory. All files in this directory
use the same syntax as /etc/crontab.
Users other than root can configure cron tasks by using the
crontab utility. All user-defined crontabs are stored
in the /var/spool/cron directory and are executed
using the usernames of the users that created them. To create a crontab
as a user, login as that user and type the command crontab
-e to edit the user's crontab using the editor specified by
the VISUAL or
EDITOR environment variable. The file
uses the same format as /etc/crontab. When the
changes to the crontab are saved, the crontab is stored according to
username and written to the file
/var/spool/cron/username.
The cron daemon checks the etc/crontab file, the
etc/cron.d/ directory, and the
/var/spool/cron directory every minute for any
changes. If any changes are found, they are loaded into memory. Thus,
the daemon does not need to be restarted if a crontab file is changed.
The /etc/cron.allow and
/etc/cron.deny files are used to restrict access
to cron. The format of both access control files is one username on
each line. Whitespace is not permitted in either file. The
cron daemon (crond) does not have to
be restarted if the access control files are modified. The access
control files are read each time a user tries to add or delete a cron
task.
The root user can always use cron, regardless of the user names listed
in the access control files.
If the file cron.allow exists, only users
listed in it are allowed to use cron, and the
at.deny file is ignored.
If cron.allow does not exist, all users listed in
cron.deny are not allowed to use cron.