9.5. Cron jobs
Packages must not modify the configuration file /etc/crontab
, and they must not modify the files in /var/spool/cron/crontabs
.
If a package wants to install a job that has to be executed via cron, it should place a file named as specified in Cron job file names into one or more of the following directories:
/etc/cron.hourly
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly
As these directory names imply, the files within them are executed on an hourly, daily, weekly, or monthly basis, respectively. The exact times are listed in /etc/crontab
.
All files installed in any of these directories must be scripts (e.g., shell scripts or Perl scripts) so that they can easily be modified by the local system administrator. In addition, they must be treated as configuration files.
If a certain job has to be executed at some other frequency or at a specific time, the package should install a file in /etc/cron.d
with a name as specified in Cron job file names. This file uses the same syntax as /etc/crontab
and is processed by cron
automatically. The file must also be treated as a configuration file. (Note that entries in the /etc/cron.d
directory are not handled by anacron
. Thus, you should only use this directory for jobs which may be skipped if the system is not running.)
Unlike crontab
files described in the IEEE Std 1003.1-2008 (POSIX.1) available from The Open Group, the files in /etc/cron.d
and the file /etc/crontab
have seven fields; namely:
Minute [0,59]
Hour [0,23]
Day of the month [1,31]
Month of the year [1,12]
Day of the week ([0,6] with 0=Sunday)
Username
Command to be run
Ranges of numbers are allowed. Ranges are two numbers separated with a hyphen. The specified range is inclusive. Lists are allowed. A list is a set of numbers (or ranges) separated by commas. Step values can be used in conjunction with ranges.
The scripts or crontab
entries in these directories should check if all necessary programs are installed before they try to execute them. Otherwise, problems will arise when a package was removed but not purged since configuration files are kept on the system in this situation.
Any cron
daemon must provide /usr/bin/crontab
and support normal crontab
entries as specified in POSIX. The daemon must also support names for days and months, ranges, and step values. It has to support /etc/crontab
, and correctly execute the scripts in /etc/cron.d
. The daemon must also correctly execute scripts in /etc/cron.{hourly,daily,weekly,monthly}
.
9.5.1. Cron job file names
The file name of a cron job file should normally match the name of the package from which it comes.
If a package supplies multiple cron job files files in the same directory, the file names should all start with the name of the package (possibly modified as described below) followed by a hyphen (-
) and a suitable suffix.
A cron job file name must not include any period or plus characters (.
or +
) characters as this will cause cron to ignore the file. Underscores (_
) should be used instead of .
and +
characters.