Sunday, 19 February 2012

Cron

     A field may 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 say
     ``every two hours'', just 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 (case does not matter).  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 spec-
     ified 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.  The command can optionally be prefixed by ``@AppleNotOnBattery '' to tell cron not to run the command when functioning on battery power.  For example, the
     ``sixth'' field when using this option would appear something like ``@AppleNotOnBattery /usr/bin/touch /tmp/foo''

     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 (ie, are 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 1st and 15th of each month, plus every Friday.

     Instead of the first five fields, one of eight special strings may appear:

           string          meaning
           ------          -------
           @reboot         Run once, at startup.
           @yearly         Run once a year, "0 0 1 1 *".
           @annually       (same as @yearly)
           @monthly        Run once a month, "0 0 1 * *".
           @weekly         Run once a week, "0 0 * * 0".
           @daily          Run once a day, "0 0 * * *".
           @midnight       (same as @daily)
           @hourly         Run once an hour, "0 * * * *".

EXAMPLE CRON FILE
     # use /bin/sh to run commands, overriding the default set by cron
     SHELL=/bin/sh
     # 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"

SEE ALSO
     crontab(1), cron(8), launchd.plist(5), launchctl(1), launchd(8)

EXTENSIONS
     When specifying day of week, both day 0 and day 7 will be considered Sunday.  BSD and ATT seem to disagree about this.

     Lists and ranges are allowed to co-exist 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.  In BSD or ATT, the environment handed to child processes is basically the one from /etc/rc.

     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).

     All of the `@' commands that can appear in place of the first five fields are extensions.

AUTHORS
     Paul Vixie <paul@vix.com>

BUGS
     If you are in one of the 70-odd countries that observe Daylight Savings Time, jobs scheduled during the rollback or advance will be affected.  In general, it is not a good idea to schedule jobs dur-
     ing this period.

     For US timezones (except parts of IN, AZ, and HI) the time shift occurs at 2AM local time.  For others, the output of the zdump(8) program's verbose (-v) option can be used to determine the moment
     of time shift.

No comments:

Post a Comment