532 lines
16 KiB
HTML
532 lines
16 KiB
HTML
|
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
<HTML><HEAD><TITLE>Man page of CRONTAB</TITLE>
|
|
</HEAD><BODY>
|
|
<H1>CRONTAB</H1>
|
|
Section: File Formats (5)<BR>Updated: 19 April 2010<BR><A HREF="#index">Index</A>
|
|
<A HREF="/cgi-bin/man/man2html">Return to Main Contents</A><HR>
|
|
|
|
|
|
<A NAME="lbAB"> </A>
|
|
<H2>NAME</H2>
|
|
|
|
crontab - tables for driving cron
|
|
<A NAME="lbAC"> </A>
|
|
<H2>DESCRIPTION</H2>
|
|
|
|
A
|
|
<I>crontab</I>
|
|
|
|
file contains instructions to the
|
|
<I><A HREF="/cgi-bin/man/man2html?8+cron">cron</A></I>(8)
|
|
|
|
daemon of the general form: ``run this command at this time on this date''.
|
|
Each user has their own crontab, and commands in any given crontab will be
|
|
executed as the user who owns the crontab. Uucp and News will usually have
|
|
their own crontabs, eliminating the need for explicitly running
|
|
<I><A HREF="/cgi-bin/man/man2html?1+su">su</A></I>(1)
|
|
|
|
as part of a cron command.
|
|
<P>
|
|
|
|
Blank lines and leading spaces and tabs are ignored. Lines whose first
|
|
non-space character is a hash-sign (#) are comments, and are ignored.
|
|
Note that comments are not allowed on the same line as cron commands, since
|
|
they will be taken to be part of the command. Similarly, comments are not
|
|
allowed on the same line as environment variable settings.
|
|
<P>
|
|
|
|
An active line in a crontab will be either an environment setting or a cron
|
|
command. The crontab file is parsed from top to bottom, so any environment
|
|
settings will affect only the cron commands below them in the file.
|
|
An environment setting is of the form,
|
|
<P>
|
|
|
|
|
|
name = value
|
|
|
|
<P>
|
|
|
|
where the spaces around the equal-sign (=) are optional, and any subsequent
|
|
non-leading spaces in
|
|
<I>value</I>
|
|
|
|
will be part of the value assigned to
|
|
<I>name</I>.
|
|
|
|
The
|
|
<I>value</I>
|
|
|
|
string may be placed in quotes (single or double, but matching) to preserve
|
|
leading or trailing blanks. To define an empty variable, quotes
|
|
<B>must</B>
|
|
|
|
be used.
|
|
<P>
|
|
|
|
The
|
|
<I>value</I>
|
|
|
|
string is
|
|
<B>not</B>
|
|
|
|
parsed for environmental substitutions or replacement of variables or
|
|
tilde(~) expansion, thus lines like
|
|
<P>
|
|
|
|
|
|
<PRE>
|
|
PATH = $HOME/bin:$PATH
|
|
PATH = ~/bin:/usr/bin:/bin
|
|
</PRE>
|
|
|
|
|
|
<P>
|
|
|
|
will not work as you might expect. And neither will this work
|
|
<P>
|
|
|
|
|
|
<PRE>
|
|
A=1
|
|
B=2
|
|
C=$A $B
|
|
</PRE>
|
|
|
|
|
|
<P>
|
|
|
|
There will not be any substitution for the defined variables in the
|
|
last value.
|
|
<P>
|
|
|
|
Several environment variables are set up automatically by the
|
|
<I><A HREF="/cgi-bin/man/man2html?8+cron">cron</A></I>(8)
|
|
|
|
daemon.
|
|
SHELL is set to /bin/sh, and LOGNAME and HOME are set from the /etc/passwd
|
|
line of the crontab's owner. PATH is set to "/usr/bin:/bin".
|
|
HOME, SHELL, and PATH may be overridden by settings in the crontab;
|
|
LOGNAME is the user that the job is running from, and may not be changed.
|
|
<P>
|
|
|
|
(Another note: the LOGNAME variable is sometimes called USER on BSD systems...
|
|
on these systems, USER will be set also.)
|
|
<P>
|
|
|
|
In addition to LOGNAME, HOME, and SHELL,
|
|
<I><A HREF="/cgi-bin/man/man2html?8+cron">cron</A></I>(8)
|
|
|
|
will look at MAILTO if it has any reason to send mail as a result of running
|
|
commands in ``this'' crontab. If MAILTO is defined (and non-empty), mail is
|
|
sent to the user so named. MAILTO may also be used to direct mail to multiple
|
|
recipients by separating recipient users with a comma. If MAILTO is defined
|
|
but empty (MAILTO=""), no mail will be sent. Otherwise mail is sent to the
|
|
owner of the crontab.
|
|
<P>
|
|
|
|
On the Debian GNU/Linux system, cron supports the
|
|
<B>pam_env</B>
|
|
|
|
module, and loads the environment specified by
|
|
<I>/etc/environment</I>
|
|
|
|
and
|
|
<I>/etc/security/pam_env.conf</I>.
|
|
|
|
It also reads locale information from
|
|
<I>/etc/default/locale</I>.
|
|
|
|
However, the PAM settings do
|
|
<B>NOT</B>
|
|
|
|
override the settings described above nor any settings in the
|
|
<I>crontab</I>
|
|
|
|
file itself. Note in particular that if you want a PATH other than
|
|
"/usr/bin:/bin", you will need to set it in the crontab file.
|
|
<P>
|
|
|
|
By default, cron will send mail using the mail "Content-Type:" header of
|
|
"text/plain" with the "charset=" parameter set to the charmap / codeset of the
|
|
locale in which
|
|
<I><A HREF="/cgi-bin/man/man2html?8+crond">crond</A></I>(8)
|
|
|
|
is started up - i.e. either the default system locale,
|
|
if no LC_* environment variables are set, or the locale specified by
|
|
the LC_* environment variables
|
|
( see
|
|
<I><A HREF="/cgi-bin/man/man2html?7+locale">locale</A></I>(7)<I>).</I>
|
|
|
|
You can use different character encodings for mailed cron job output by
|
|
setting the CONTENT_TYPE and CONTENT_TRANSFER_ENCODING variables in crontabs,
|
|
to the correct values of the mail headers of those names.
|
|
<P>
|
|
|
|
The format of a cron command is very much the V7 standard, with a number of
|
|
upward-compatible extensions. Each line has five time and date fields,
|
|
followed by a command, followed by a newline character ('\n').
|
|
The system crontab (/etc/crontab) uses the same format, except that
|
|
the username for the command is specified after the time and
|
|
date fields and before the command. The fields may be separated
|
|
by spaces or tabs. The maximum permitted length for the command field is
|
|
998 characters.
|
|
<P>
|
|
|
|
Commands are executed by
|
|
<I><A HREF="/cgi-bin/man/man2html?8+cron">cron</A></I>(8)
|
|
|
|
when the minute, hour, and month of year fields match the current time,
|
|
<I>and</I>
|
|
|
|
when at least one of the two day fields (day of month, or day of week)
|
|
match the current time (see ``Note'' below).
|
|
<I><A HREF="/cgi-bin/man/man2html?8+cron">cron</A></I>(8)
|
|
|
|
examines cron entries once every minute.
|
|
The time and date fields are:
|
|
<DL COMPACT>
|
|
<DT id="1"><DD>
|
|
|
|
|
|
field<TT> </TT>allowed values<BR>
|
|
<BR>
|
|
|
|
-----<TT> </TT>--------------<BR>
|
|
<BR>
|
|
|
|
minute<TT> </TT>0-59<BR>
|
|
<BR>
|
|
|
|
hour<TT> </TT>0-23<BR>
|
|
<BR>
|
|
|
|
day of month<TT> </TT>1-31<BR>
|
|
<BR>
|
|
|
|
month<TT> </TT>1-12 (or names, see below)<BR>
|
|
<BR>
|
|
|
|
day of week<TT> </TT>0-7 (0 or 7 is Sun, or use names)<BR>
|
|
<BR>
|
|
|
|
</DL>
|
|
<P>
|
|
|
|
A field may be an asterisk (*), which always stands for ``first-last''.
|
|
<P>
|
|
|
|
Ranges of numbers are allowed. Ranges are two numbers separated
|
|
with a hyphen. The specified range is inclusive. For example,
|
|
8-11 for an ``hours'' entry specifies execution at hours 8, 9, 10
|
|
and 11.
|
|
<P>
|
|
|
|
Lists are allowed. A list is a set of numbers (or ranges)
|
|
separated by commas. Examples: ``1,2,5,9'', ``0-4,8-12''.
|
|
<P>
|
|
|
|
Step values can be used in conjunction with ranges. Following
|
|
a range with ``/<number>'' specifies skips of the number's value
|
|
through the range. For example, ``0-23/2'' can be used in the hours
|
|
field to specify command execution every other hour (the alternative
|
|
in the V7 standard is ``0,2,4,6,8,10,12,14,16,18,20,22''). Steps are
|
|
also permitted after an asterisk, so if you want to say ``every two
|
|
hours'', just use ``*/2''.
|
|
<P>
|
|
|
|
Names can also be used for the ``month'' and ``day of week''
|
|
fields. Use the first three letters of the particular
|
|
day or month (case doesn't matter). Ranges or
|
|
lists of names are not allowed.
|
|
<P>
|
|
|
|
The ``sixth'' field (the rest of the line) specifies the command to be
|
|
run.
|
|
The entire command portion of the line, up to a newline or %
|
|
character, will be executed by /bin/sh or by the shell
|
|
specified in the SHELL variable of the crontab file.
|
|
Percent-signs (%) in the command, unless escaped with backslash
|
|
(\), will be changed into newline characters, and all data
|
|
after the first % will be sent to the command as standard
|
|
input. There is no way to split a single command line onto multiple
|
|
lines, like the shell's trailing "\".
|
|
<P>
|
|
|
|
Note: The day of a command's execution can be specified by two
|
|
fields --- day of month, and day of week. If both fields are
|
|
restricted (i.e., don't start with *), the command will be run when
|
|
<I>either</I>
|
|
|
|
field matches the current time. For example,
|
|
<BR>
|
|
|
|
``30 4 1,15 * 5''
|
|
would cause a command to be run at 4:30 am on the 1st and 15th of each
|
|
month, plus every Friday. One can, however, achieve the desired result
|
|
by adding a test to the command (see the last example in EXAMPLE CRON FILE
|
|
below).
|
|
<P>
|
|
|
|
Instead of the first five fields, one of eight special strings may appear:
|
|
<DL COMPACT>
|
|
<DT id="2"><DD>
|
|
|
|
|
|
string<TT> </TT>meaning<BR>
|
|
<BR>
|
|
|
|
------<TT> </TT>-------<BR>
|
|
<BR>
|
|
|
|
@reboot<TT> </TT>Run once, at startup.<BR>
|
|
<BR>
|
|
|
|
@yearly<TT> </TT>Run once a year, "0 0 1 1 *".<BR>
|
|
<BR>
|
|
|
|
@annually<TT> </TT>(same as @yearly)<BR>
|
|
<BR>
|
|
|
|
@monthly<TT> </TT>Run once a month, "0 0 1 * *".<BR>
|
|
<BR>
|
|
|
|
@weekly<TT> </TT>Run once a week, "0 0 * * 0".<BR>
|
|
<BR>
|
|
|
|
@daily<TT> </TT>Run once a day, "0 0 * * *".<BR>
|
|
<BR>
|
|
|
|
@midnight<TT> </TT>(same as @daily)<BR>
|
|
<BR>
|
|
|
|
@hourly<TT> </TT>Run once an hour, "0 * * * *".<BR>
|
|
<BR>
|
|
|
|
</DL>
|
|
<P>
|
|
|
|
Please note that startup, as far as @reboot is concerned, is the time when
|
|
the
|
|
<I><A HREF="/cgi-bin/man/man2html?8+cron">cron</A></I>(8)
|
|
|
|
daemon startup. In particular, it may be before some system daemons,
|
|
or other facilities, were startup. This is due to the boot order
|
|
sequence of the machine.
|
|
<P>
|
|
<A NAME="lbAD"> </A>
|
|
<H2>EXAMPLE CRON FILE</H2>
|
|
|
|
<P>
|
|
The following lists an example of a user crontab file.
|
|
<P>
|
|
<PRE>
|
|
|
|
# use /bin/bash to run commands, instead of the default /bin/sh
|
|
SHELL=/bin/bash
|
|
# mail any output to `paul', no matter whose crontab this is
|
|
MAILTO=paul
|
|
#
|
|
# run five minutes after midnight, every day
|
|
5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
|
|
# run at 2:15pm on the first of every month --- output mailed to paul
|
|
15 14 1 * * $HOME/bin/monthly
|
|
# run at 10 pm on weekdays, annoy Joe
|
|
0 22 * * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%
|
|
23 0-23/2 * * * echo "run 23 minutes after midn, 2am, 4am ..., everyday"
|
|
5 4 * * sun echo "run at 5 after 4 every Sunday"
|
|
0 */4 1 * mon echo "run every 4th hour on the 1st and on every Monday"
|
|
0 0 */2 * sun echo "run at midn on every Sunday that's an uneven date"
|
|
# Run on every second Saturday of the month
|
|
0 4 8-14 * * test $(date +\%u) -eq 6 && echo "2nd Saturday"
|
|
</PRE>
|
|
|
|
<P>
|
|
<P>
|
|
|
|
All the above examples run non-interactive programs. If you wish to run a
|
|
program that interacts with the user's desktop you have to make sure the proper
|
|
environment variable
|
|
<I>DISPLAY</I>
|
|
|
|
is set.
|
|
<P>
|
|
|
|
|
|
|
|
|
|
<PRE>
|
|
# Execute a program and run a notification every day at 10:00 am
|
|
0 10 * * * $HOME/bin/program | DISPLAY=:0 notify-send "Program run" "$(cat)"
|
|
</PRE>
|
|
|
|
<P>
|
|
<A NAME="lbAE"> </A>
|
|
<H2>EXAMPLE SYSTEM CRON FILE</H2>
|
|
|
|
<P>
|
|
The following lists the content of a regular system-wide crontab file. Unlike a
|
|
user's crontab, this file has the username field, as used by /etc/crontab.
|
|
<P>
|
|
<PRE>
|
|
# /etc/crontab: system-wide crontab
|
|
# Unlike any other crontab you don't have to run the `crontab'
|
|
# command to install the new version when you edit this file
|
|
# and files in /etc/cron.d. These files also have username fields,
|
|
# that none of the other crontabs do.
|
|
|
|
SHELL=/bin/sh
|
|
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
|
|
|
|
# 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
|
|
# | | | | |
|
|
# m h dom mon dow usercommand
|
|
17 * * * * root cd / && run-parts --report /etc/cron.hourly
|
|
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
|
|
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
|
|
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
|
|
#
|
|
</PRE>
|
|
|
|
<P>
|
|
Note that all the system-wide tasks will run, by default, from 6 am to 7 am. In
|
|
the case of systems that are not powered on during that period of time, only
|
|
the hourly tasks will be executed unless the defaults above are changed.
|
|
<P>
|
|
<P>
|
|
<A NAME="lbAF"> </A>
|
|
<H2>SEE ALSO</H2>
|
|
|
|
<A HREF="/cgi-bin/man/man2html?8+cron">cron</A>(8), <A HREF="/cgi-bin/man/man2html?1+crontab">crontab</A>(1)
|
|
<A NAME="lbAG"> </A>
|
|
<H2>EXTENSIONS</H2>
|
|
|
|
When specifying day of week, both day 0 and day 7 will be considered Sunday.
|
|
BSD and AT&T seem to disagree about this.
|
|
<P>
|
|
|
|
Lists and ranges are allowed to co-exist in the same field.
|
|
"1-3,7-9" would be rejected by AT&T or BSD cron --- they want
|
|
to see "1-3" or "7,8,9" ONLY.
|
|
<P>
|
|
|
|
Ranges can include "steps", so "1-9/2" is the same as "1,3,5,7,9".
|
|
<P>
|
|
|
|
Months or days of the week can be specified by name.
|
|
<P>
|
|
|
|
Environment variables can be set in the crontab. In BSD or AT&T, the
|
|
environment handed to child processes is basically the one from /etc/rc.
|
|
<P>
|
|
|
|
Command output is mailed to the crontab owner (BSD can't do this), can be
|
|
mailed to a person other than the crontab owner (SysV can't do this), or the
|
|
feature can be turned off and no mail will be sent at all (SysV can't do this
|
|
either).
|
|
<P>
|
|
|
|
All of the `@' commands that can appear in place of the first five fields
|
|
are extensions.
|
|
<A NAME="lbAH"> </A>
|
|
<H2>LIMITATIONS</H2>
|
|
|
|
The
|
|
<I>cron</I>
|
|
|
|
daemon runs with a defined timezone. It currently does not support
|
|
per-user timezones. All the tasks: system's and user's will be run based on the
|
|
configured timezone. Even if a user specifies the
|
|
<I>TZ</I>
|
|
|
|
environment variable in his
|
|
<I>crontab</I>
|
|
|
|
this will affect only the commands executed in the crontab, not the execution
|
|
of the crontab tasks themselves.
|
|
<P>
|
|
POSIX specifies that the day of month and the day of week fields both need to
|
|
match the current time if either of them
|
|
<I>is</I>
|
|
|
|
a *. However, this implementation only checks if the
|
|
<I>first character</I>
|
|
|
|
is a *. This is why "0 0 */2 * sun" runs every Sunday that's an
|
|
uneven date while the POSIX standard would have it run every Sunday and on
|
|
every uneven date.
|
|
<P>
|
|
The
|
|
<I>crontab</I>
|
|
|
|
syntax does not make it possible to define all possible periods one can
|
|
imagine. For example, it is not straightforward to define the last
|
|
weekday of a month.
|
|
To have a task run in a time period that cannot be defined using
|
|
<I>crontab</I>
|
|
|
|
syntax, the best approach would be to have the program itself check the
|
|
date and time information and continue execution only if the period
|
|
matches the desired one.
|
|
<P>
|
|
If the program itself cannot do the checks then a wrapper script would be
|
|
required. Useful tools that could be used for date analysis are
|
|
<I>ncal</I>
|
|
|
|
or
|
|
<I>calendar</I>
|
|
|
|
For example, to run a program the last Saturday of every month you could use
|
|
the following wrapper code:
|
|
<P>
|
|
<PRE>
|
|
0 4 * * Sat [ "$(date +\%e)" = "$(LANG=C ncal | sed -n 's/^Sa .* \([0-9]\+\) *$/\1/p')" ] && echo "Last Saturday" && program_to_run
|
|
</PRE>
|
|
|
|
<P>
|
|
<P>
|
|
<A NAME="lbAI"> </A>
|
|
<H2>DIAGNOSTICS</H2>
|
|
|
|
cron requires that each entry in a crontab end in a newline character. If the
|
|
last entry in a crontab is missing a newline (i.e. terminated by EOF),
|
|
cron will consider the crontab (at least partially) broken.
|
|
A warning will be written to syslog.
|
|
<P>
|
|
<A NAME="lbAJ"> </A>
|
|
<H2>AUTHOR</H2>
|
|
|
|
Paul Vixie <<A HREF="mailto:paul@vix.com">paul@vix.com</A>> is the author of
|
|
<I>cron</I>
|
|
|
|
and original creator of this manual page. This page has also been modified for
|
|
Debian by Steve Greenland, Javier Fernandez-Sanguino, Christian Kastner and
|
|
Christian Pekeler.
|
|
<P>
|
|
|
|
<HR>
|
|
<A NAME="index"> </A><H2>Index</H2>
|
|
<DL>
|
|
<DT id="3"><A HREF="#lbAB">NAME</A><DD>
|
|
<DT id="4"><A HREF="#lbAC">DESCRIPTION</A><DD>
|
|
<DT id="5"><A HREF="#lbAD">EXAMPLE CRON FILE</A><DD>
|
|
<DT id="6"><A HREF="#lbAE">EXAMPLE SYSTEM CRON FILE</A><DD>
|
|
<DT id="7"><A HREF="#lbAF">SEE ALSO</A><DD>
|
|
<DT id="8"><A HREF="#lbAG">EXTENSIONS</A><DD>
|
|
<DT id="9"><A HREF="#lbAH">LIMITATIONS</A><DD>
|
|
<DT id="10"><A HREF="#lbAI">DIAGNOSTICS</A><DD>
|
|
<DT id="11"><A HREF="#lbAJ">AUTHOR</A><DD>
|
|
</DL>
|
|
<HR>
|
|
This document was created by
|
|
<A HREF="/cgi-bin/man/man2html">man2html</A>,
|
|
using the manual pages.<BR>
|
|
Time: 00:06:02 GMT, March 31, 2021
|
|
</BODY>
|
|
</HTML>
|