Home » Linux » Планировщики Cron и Anacron

Планировщики Cron и Anacron

В 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 заново — проблемы снимутся сами собой.

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Do NOT follow this link or you will be banned from the site!