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 schedule
one-time tasks, refer to Section 35.2 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 SHELL variable tells the system which shell
environment to use (in this example the bash shell), while 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 is
not 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 following 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 or
feb)
-
dayofweek — any
integer from 0 to 7, where 0 or 7 represents Sunday (or the short
name of the week such as sun or mon)
-
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)
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.
As shown in the /etc/crontab file, the
run-parts script executes 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
directories should be shell scripts.
If a cron task is required 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. Refer to Example 35-1 for
examples.
# 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
|
Example 35-1. Crontab Examples
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 usernames
listed in the access control files.
If the file cron.allow exists, only
users listed in it are allowed to use cron, and the cron.deny file is ignored.
If cron.allow does not exist, users
listed in cron.deny are not allowed to
use cron.