В Linux (и в целом в Unix) предусмотрены два планировщика запуска скриптов по расписанию — Cron (синхронный) и Anacron (асинхронный или анахроничный).
Если Cron предназначен для периодического запуска задач в заданный МОМЕНТ времени, то Anacron выполняет задачи в указанный ИНТЕРВАЛ времени.
Про Cron знают все и он устанавливается в любой системе по умолчанию. Anacron же не всегда доступен по умолчанию и известен не всем. Он удобен тогда, когда некий скрипт нужно обязательно запустить в течение дня, недели или месяца, при этом сам момент запуска значения не имеет. Это бывает необходимо, если компьютер периодически приходится выключать. Anacron «просыпается» каждый час и проверяет, был ли выполнен в указанный интервал времени скрипт, заданный в файле конфигурации /etc/anacrontab, и если нет, то выполняет его.
В Centos 7.2 Anacron предустановлен даже в минимальной конфигурации сервера (в отличие, например, от Ubuntu 14.04). Его наличие слегка запутало меня, поскольку после установки программы для поиска руткитов Rkhunter я стал получать на почту отчёты о сканировании, хотя в файлах настройки Cron строчка отсылки отчётов была закомментирована. Более того, отчёты приходили почему-то между 3 и 4 часами ночи и я терялся в догадках о причинах такой хронологии. Кстати, если вы работаете в панели ISPmanager, то под планировщиком там подразумевается только Cron и задачи, запланированные через Anacron, оказываются скрытыми от пользователей.
Пересмотрев все файлы и директории конфигурации Cron /etc/crontab, /var/spool/crontab/* и /etc/cron.d, я вспомнил, наконец, про существование Anacron и обнаружил, что в его конфигурационном файле /etc/anacrontab был прописан запуск заданий из папки /etc/cron.daily.
В переменной START_HOURS_RANGE был указан разрешённый интервал запуска скриптов по умолчанию в течение дня, и он начинался как раз с 3 часов ночи:
START_HOURS_RANGE=3-22
А вот и строчка запуска скриптов из папки /etc/cron.daily, в том числе Rkhunter:
1 5 cron.daily nice run-parts /etc/cron.daily
1 — запускать с периодичностью в 1 день
5 — с задержкой в 5 минут (для того, чтобы компьютер успел полностью инициализироваться после загрузки)
cron.daily — название задачи, необходимое для отслеживания её в логах (в зависимости от дистрибутива /var/log/syslog, /var/log/cron).
nice run-parts /etc/cron.daily — команда с аргументами или название скрипта
В данном случае ежедневно запускаются все скрипты, находящиеся в директории /etc/cron.daily, хотя в файле конфигурации /etc/crontab самого Cron этого в явном виде не прописано.
Вот пример логов Anacron в файле /etc/log/cron:
Nov 15 00:01:01 userX anacron[31473]: Anacron started on 2015-11-16
Nov 15 00:01:01 userX anacron[31473]: Normal exit (0 jobs run)
Nov 15 01:01:01 userX anacron[1950]: Anacron started on 2015-11-16
Nov 15 01:01:01 userX anacron[1950]: Normal exit (0 jobs run)
Nov 15 02:01:01 userX anacron[4510]: Anacron started on 2015-11-16
Nov 15 02:01:01 userX anacron[4510]: Normal exit (0 jobs run)
Nov 15 03:01:01 userX anacron[7025]: Anacron started on 2015-11-16
Nov 15 03:01:01 userX anacron[7025]: Will run job `cron.daily' in 17 min.
Nov 15 03:01:01 userX anacron[7025]: Jobs will be executed sequentially
Nov 15 03:18:01 userX anacron[7025]: Job `cron.daily' started
Nov 15 03:27:09 userX anacron[7025]: Job `cron.daily' terminated
Nov 15 03:27:09 userX anacron[7025]: Normal exit (1 job run)
Из лога видно, что Anacron запускается каждый час, но первые 3 часа ему задачи выполнять запрещено (0 jobs run). В начале же четвёртого часа он объявляет о том, что спустя 17 минут запустит задачу cron.daily (хотя минимальная задержка задана в 5 минут).
Если задачи Anacron не запускаются
По мере работы с Anacron оказалось, что программа это довольно капризна и это не только моё мнение. По непонятным причинам некоторые задания, указанные в конфигурационном файле, могут не стартовать, тогда как другие выполняются нормально. Я выявил следующую закономерность: если в самом начале конкретного задания указывать не цифру (1 для дня и 7 для недели), а кодовое обозначение @daily или @weekly, то задание чаще всего отрабатывает нормально.
Если же вы столкнулись с непреодолимыми проблемами при запуске заданий, то просто переустановите Anacron заново — проблемы снимутся сами собой.