Anacron is a daemon in charge of scheduling tasks on a daily, weekly or monthly basis.
Although anacron is part of the cron package family, the package name is cronie-anacron, unlike cron it doesn’t assume that a machine is running continuously. On the contrary, anacron can run periodic jobs even though the system is regularly powered off. If a scheduled job is not executed because the machine is down or powered off, it will be run some time after the next boot.
Anacron owns an additional, very valuable feature: it makes randomizing the time of the job execution much easier. Through this daemon, all web log rotations don’t start at the same time for example, avoiding network and CPU crisis in virtualized environments.
By default, the crond daemon starts anacron through the /etc/cron.hourly/0anacron cron job. This execution only occurs once per day (verification is done via the /var/spool/anacron/cron.daily file) and only if the machine doesn’t run on battery power.
Anacron stores its configuration in the /etc/anacrontab file.
The anacrontab File
A default anacrontab file appears as follows:
SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # the maximal random delay added to the base delay of the jobs RANDOM_DELAY=45 # the jobs will be started during the following hours only START_HOURS_RANGE=3-22 #period in days delay in minutes job-identifier command 1 5 cron.daily nice run-parts /etc/cron.daily 7 25 cron.weekly nice run-parts /etc/cron.weekly @monthly 45 cron.monthly nice run-parts /etc/cron.monthly
The anacrontab file is made up of two parts: the environment and the job description sections.
The Environment Section
This part describes the environment in which tasks are executed:
- SHELL: contains the shell used for running tasks,
- PATH: defines the path where executables are searched for,
- MAILTO: provides the mail address where error messages are sent,
- LOGNAME: if specified, defines the from: part of the mails sent in case of error,
- RANDOM_DELAY: specifies the maximum number of minutes that
will be added to the scheduled date of execution (the real delay added will be between 0 and the RANDOM_DELAY value) ; a value of 0 means no random delay added,
- START_HOURS_RANGE: defines an interval specified in hours when
scheduled jobs can be run (tasks can’t be started outside this interval).
The Job Description Section
This section can contain several lines, each consisting in four fields:
#period in days delay in minutes job-identifier command 1 5 cron.daily nice run-parts /etc/cron.daily 7 25 cron.weekly nice run-parts /etc/cron.weekly @monthly 45 cron.monthly nice run-parts /etc/cron.monthly
These four fields are:
- first column: interval in days between two job executions,
- second column: delay in minutes between two job executions, to avoid running several tasks at the same time,
- third column: comment added to the anacron logs,
- fourth column: job to execute.
Tasks are executed through the nice run-parts directory command where
- nice is the command to execute jobs with a lower priority (by default 10),
- run-parts is a shell script returning all the files in a given directory.
New Job Scheduling
Scheduling a new task consists in:
- deciding which periodicity is wanted: daily, weekly or monthly (if you need another periodicity, you will need to create a new directory and add a line in the /etc/anacrontab file),
- putting the script to execute into the respective directory (/etc/cron.daily, /etc/cron.weekly or /etc/cron.monthly).
Sources: anacron and anacrontab man pages.