One of the most useful utilities in FreeBSD is
cron. This utility runs in the
background and regularly checks
/etc/crontab
for tasks to execute and
searches /var/cron/tabs
for custom crontab
files. These files are used to schedule tasks which
cron runs at the specified times.
Each entry in a crontab defines a task to run and is known as a
cron job.
Two different types of configuration files are used: the
system crontab, which should not be modified, and user crontabs,
which can be created and edited as needed. The format used by
these files is documented in crontab(5). The format of the
system crontab, /etc/crontab
includes a
who
column which does not exist in user
crontabs. In the system crontab,
cron runs the command as the user
specified in this column. In a user crontab, all commands run
as the user who created the crontab.
User crontabs allow individual users to schedule their own
tasks. The root
user
can also have a user crontab
which can be
used to schedule tasks that do not exist in the system
crontab
.
Here is a sample entry from the system crontab,
/etc/crontab
:
# /etc/crontab - root's crontab for FreeBSD # # $FreeBSD: release/10.2.0/en_US.ISO8859-1/books/handbook/config/chapter.xml 46735 2015-05-29 23:24:13Z allanjude $ # SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin # #minute hour mday month wday who command # */5 * * * * root /usr/libexec/atrunLines that begin with the
#
character are comments. A comment can be placed in the file as a reminder of what and why a desired action is performed. Comments cannot be on the same line as a command or else they will be interpreted as part of the command; they must be on a new line. Blank lines are ignored.The equals (
=
) character is used to define any environment settings. In this example, it is used to define theSHELL
andPATH
. If theSHELL
is omitted, cron will use the default Bourne shell. If thePATH
is omitted, the full path must be given to the command or script to run.This line defines the seven fields used in a system crontab:
minute
,hour
,mday
,month
,wday
,who
, andcommand
. Theminute
field is the time in minutes when the specified command will be run, thehour
is the hour when the specified command will be run, themday
is the day of the month,month
is the month, andwday
is the day of the week. These fields must be numeric values, representing the twenty-four hour clock, or a*
, representing all values for that field. Thewho
field only exists in the system crontab and specifies which user the command should be run as. The last field is the command to be executed.This entry defines the values for this cron job. The
*/5
, followed by several more*
characters, specifies that/usr/libexec/atrun
is invoked byroot
every five minutes of every hour, of every day and day of the week, of every month.Commands can include any number of switches. However, commands which extend to multiple lines need to be broken with the backslash “\” continuation character.
To create a user crontab, invoke
crontab
in editor mode:
%
crontab -e
This will open the user's crontab using the default text editor. The first time a user runs this command, it will open an empty file. Once a user creates a crontab, this command will open that file for editing.
It is useful to add these lines to the top of the crontab file in order to set the environment variables and to remember the meanings of the fields in the crontab:
SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin # Order of crontab fields # minute hour mday month wday command
Then add a line for each command or script to run,
specifying the time to run the command. This example runs the
specified custom Bourne shell script every day at two in the
afternoon. Since the path to the script is not specified in
PATH
, the full path to the script is
given:
0 14 * * * /usr/home/dru/bin/mycustomscript.sh
Before using a custom script, make sure it is executable and test it with the limited set of environment variables set by cron. To replicate the environment that would be used to run the above cron entry, use:
env -i SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/home/dru
LOGNAME=dru
/usr/home/dru/bin/mycustomscript.sh
The environment set by cron is discussed in crontab(5). Checking that scripts operate correctly in a cron environment is especially important if they include any commands that delete files using wildcards.
When finished editing the crontab, save the file. It will automatically be installed and cron will read the crontab and run its cron jobs at their specified times. To list the cron jobs in a crontab, use this command:
%
crontab -l
0 14 * * * /usr/home/dru/bin/mycustomscript.sh
To remove all of the cron jobs in a user crontab:
%
crontab -r
remove crontab for dru?y
All FreeBSD documents are available for download at http://ftp.FreeBSD.org/pub/FreeBSD/doc/
Questions that are not answered by the
documentation may be
sent to <[email protected]>.
Send questions about this document to <[email protected]>.