A crontab file contains instructions to the cron(1) daemon of the general form: run this command at this time on this date. Each user who has been assigned cron privileges has his or her own crontab file.
Blank lines and leading spaces and tabs are ignored. Lines whose first non-space character is a pound sign (#) are comments, and are ignored. Note that comments are not allowed on the same line as cron commands because they will be taken to be part of the command. Similarly, comments are not allowed on the same line as environment variable settings.
An active line in a crontab will be either an environment setting or a cron command. An environment setting is of the form,
name = value
where the spaces around the equal sign (=) are optional, and
any subsequent non-leading spaces in value will be part of
the value assigned to name. The value string can be
placed in quotes (single or double, but matching) to preserve
leading or trailing blanks. Setting environment variables is
supported by the Interix cron(1) daemon; it is not supported
by the Windows-based Cron service.
Several environment variables are set up automatically by the cron(1) daemon. INTERIX_ROOT is set to the directory in which INTERIX is installed. SYSTEMROOT is the path name (in Windows syntax) of the directory in which Windows is installed; it is used by some Win32 programs. TZ is the time zone; it is used by date(1) and a few other INTERIX utilities. SHELL is set to /bin/sh. PATH is set to /bin:/usr/contrib. LOGNAME and HOME are set from the Windows user database. All of these variables can be overridden by settings in the crontab, except for LOGNAME.
In addition to LOGNAME, HOME, and SHELL, cron(1) will look at MAILTO if it has any reason to send mail as a result of running commands in the crontab. If MAILTO is defined (and non-empty), mail is sent to the user so named. If MAILTO is defined but empty (MAILTO=""), no mail will be sent. Otherwise, mail is sent to the owner of the crontab. Mail is sent using mailx(1).
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. Commands are executed by cron(1) when the minute, hour, and month of year fields match the current time, and when at least one of the two day fields (day of month, or day of week) match the current time (see Note later in this topic). The cron(1) utility examines cron entries once every minute.
The time and date fields are:
Field | Allowed values |
---|---|
minute | 0-59 |
hour | 0-23 |
day of month | 0-31 |
month | 0-12 (or names, see below) |
day of week | 0-7 (0 or 7 is Sun, or use names) |
A field can be an asterisk (*), which always stands for first-last.
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.
Lists are allowed. A list is a set of numbers (or ranges) separated by commas. Examples: 1,2,5,9, 0-4,8-12.
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 specify every two hours, use */2.
Names can also be used for the month and day-of-week fields. Use the first three letters of the particular day or month (it is not case sensitive). Ranges or lists of names are not allowed.
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 cronfile. 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.
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 (that is, ar not *), the command will be run when either field matches the current time.
For example,
30 4 1,15 * 5
would cause a command to be run at 4:30 am on the first and
fifteenth of each month, plus every Friday.
# mail any output to `paul', even if this crontab is run as `Administrator'
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"
Lists and ranges can coexist in the same field. "1-3,7-9" would be rejected by ATT or BSD cron; they want to see "1-3" or "7,8,9" ONLY.
Ranges can include steps, so "1-9/2" is the same as "1,3,5,7,9".
Names of months or days of the week can be specified by name.
Environment variables can be set in the crontab.
Command output is mailed to the crontab owner (BSD cannot do this), can be mailed to a person other than the crontab owner (SysV cannot do this), or the feature can be turned off and no mail will be sent at all (SysV cannot do this, either).
cron(1)
crontab(1)