What is Anacron ? ----------------- Anacron is a periodic command scheduler. It executes commands at intervals specified in days. Unlike cron, it does not assume that the system is running continuously. It can therefore be used to control the execution of daily, weekly and monthly jobs (or anything with a period of n days), on systems that don't run 24 hours a day. When installed and configured properly, Anacron will make sure that the commands are run at the specified intervals as closely as machine-uptime permits. Every time Anacron is run, it reads a configuration file that specifies the jobs Anacron controls, and their periods in days. If a job wasn't executed in the last n days, where n is the period of that job, Anacron executes it. Anacron then records the date in a special timestamp file that it keeps for each job, so it can know when to run it again. When all the executed commands terminate, Anacron exits. It is recommended to run Anacron from the system boot-scripts. This way the jobs "whose time has come" will be run shortly after the machine boots. A delay can be specified for each job so that the machine isn't overloaded at boot time. In addition to running Anacron from the boot-scripts, it is also recommended to schedule it as a daily cron-job (usually at an early morning hour), so that if the machine is kept running for a night, jobs for the next day will still be executed. Why this may be useful ? ------------------------ Most Unix-like systems have daily, weekly and monthly scripts that take care of various "housekeeping chores" such as log-rotation, updating the "locate" and "man" databases, etc. Daily scripts are usually scheduled as cron-jobs to execute around 1-7 AM. Weekly scripts are scheduled to run on Sundays. On machines that are turned off for the night or for the weekend, these scripts rarely get run. Anacron solves this problem. These jobs can simply be scheduled as Anacron-jobs with periods of 1, 7 and a special target called @monthly. What Anacron is not ? --------------------- Anacron is not an attempt to make cron redundant. It cannot currently be used to schedule commands at intervals smaller than days. It also does not guarantee that the commands will be executed at any specific day or hour. It isn't a full-time daemon. It has to be executed from boot scripts, from cron-jobs, or explicitly. For more details, see the anacron(8) manpage. Requirements ------------ - A Linux system. (maybe other *NIX systems) - A functioning syslog daemon. - A functioning /usr/lib/sendmail command. (all MTAs should have that). Compilation and Installation ---------------------------- - Untar the source package. - Check the Makefile. Edit as required. - Check the top of "global.h". You may want to change the syslog facility and priorities, and the path to your MTA's sendmail compatible command (/usr/lib/sendmail). - cd to the directory. - Type "make". You can safely ignore warnings of the form: "*.d: No such file or directory" - Become root. Type "make install". Setup ----- 1. Locate your system's daily, weekly and monthly cron-jobs. See your cron documentation for more details. 2. Decide which of these jobs should be controlled by Anacron. Remember that Anacron does not guarantee execution at any specific day of the month, day of the week, or time of day. Jobs for which the timing is critical should probably not be controlled by Anacron. 3. Comment these jobs out of their crontab files. (You may have to use the "crontab" command for this. See the cron documentation.) 4. Put them in /etc/anacrontab. Note that the format is not the same as the crontab entries. See the anacrontab(5) manpage. Here's an example from a typical Debian system: -----Cut # /etc/anacrontab example SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin # format: period delay job-identifier command 1 5 cron.daily run-parts /etc/cron.daily 7 10 cron.weekly run-parts /etc/cron.weekly @monthly 15 cron.monthly run-parts /etc/cron.monthly -----Cut 5. Put the command "anacron -s" somewhere in your boot-scripts. Make sure that syslogd is started before this command. 6. Schedule the command "anacron -s" as a daily cron-job (preferably at some early morning hour). This will make sure that jobs are run when the systems is left running for a night. That's it. It is a good idea to check what your daily, weekly and monthly scripts actually do, and disable any parts that may be irrelevant for your system. Credits ------- Anacron was originally conceived and implemented by Christian Schwarz . The current implementation is a complete rewrite by Itai Tzur . Current code base maintained by Sean 'Shaleh' Perry .