Monday, May 17, 2010

Cron

Cron is a time-based job scheduler in Unix-like computer operating systems. The name cron comes from the word "chronos", Greek for "time". Cron enables users to schedule jobs (commands or shell scripts) to run periodically at certain times or dates. It is commonly used to automate system maintenance or administration, though its general-purpose nature means that it can be used for other purposes, such as connecting to the Internet and downloading email.[1]


Overview

Cron is driven by a crontab, a configuration file that specifies shell commands to run periodically on a given schedule. The crontab files are stored where the lists of jobs and other instructions to the cron daemon are kept. Users can have their own individual crontab files and often there is a systemwide crontab file (usually in /etc or a subdirectory of /etc) which only system administrators can edit.

Each line of a crontab file represents a job and is composed of a CRON expression, followed by a shell command to execute. Some implementations of cron, such as that in the popular 4th BSD edition written by Paul Vixie and included in many Linux distributions, add a username specification into the format as the sixth field, as whom the specified job will be run (subject to user existence in /etc/passwd and allowed permissions). This is only allowed in the system crontabs (/etc/crontab and /etc/cron.d/*), not in others which are each assigned to a single user to configure.

For "day of the week" (field 5), both 0 and 7 are considered Sunday, though some versions of Unix such as AIX do not list "7" as acceptable in the man page. While normally the job is executed when the time/date specification fields all match the current time and date, there is one exception: if both "day of month" and "day of week" are restricted (not "*"), then either the "day of month" field (3) or the "day of week" field (5) must match the current day.
[edit] Examples

The following will clear the Apache error log at one minute past midnight (00:01 of every day of the month, of every day of the week).


1 0 * * * echo -n "" > /www/apache/logs/error_log

The following will run the script /home/user/test.pl every 5 minutes.

*/5 * * * * /home/user/test.pl

.---------------- minute (0 - 59)
| .------------- hour (0 - 23)
| | .---------- day of month (1 - 31)
| | | .------- month (1 - 12) OR jan,feb,mar,apr ...
| | | | .---- day of week (0 - 7) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
| | | | |
* * * * * command to be executed

Predefined scheduling definitions

There are several special predefined values which can be used to substitute the CRON expression.
Entry Description Equivalent To

@yearly Run once a year 0 0 1 1 *

@annually (same as @yearly) 0 0 1 1 *

@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) 0 0 * * *

@hourly Run once an hour 0 * * * *

No comments:

Post a Comment