Anacron linux что это

Обновлено: 07.07.2024

Если Cron предназначен для периодического запуска задач в заданный МОМЕНТ времени, то Anacron выполняет задачи в указанный ИНТЕРВАЛ времени.

В 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 часов ночи:

А вот и строчка запуска скриптов из папки /etc/cron.daily, в том числе Rkhunter:

1 5 cron.daily 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 — демон-планировщик задач, система для автоматического запуска приложений и скриптов подобная Cron но более подходящая для тех кто не держит свой компьютер постоянно включенным, компьютер может не работать непрерывно.


Один из самых больших недочетов Cron заключается в том, что он предполагает что сервер или компьютер всегда включен. Если же в установленное время выполнения задачи машина выключена, то задача не будет запущена. Это серьезная проблема для систем, которые не могут быть включены постоянно, потому был разработан демон-планировщик Anacron.

Anacron значит «анахронический» и используется для устранения этого недочета cron, он использует не такие подробные параметры как у cron и можно сказать является его упрощенной версией. Наименьший интервал, который существует в anacron это день, из этого следует что anacron нужно использовать как дополнение к cron, а не как замещение его.

Преимущество anacron состоит в том, что он пользуется временными метками для файлов, чтобы узнать, когда команды были выполнены в последний раз. Это значит, что если задача должна выполняться ежедневно, но компьютер был выключен в течение времени, когда anacron запускается, то он может увидеть, что задача была запущена в последний раз более 24 часов назад и выполнит ее правильно.


Утилита anacron (как и cron) имеет таблицу планирования, задачи демон-планировщик хранят в файле конфигурации /etc/anacron где каждая строка этого файла соответствует задаче и имеет формат:

Для каждой задачи Anacron определяет, выполнялась ли она в период, указанный в поле period файла конфигурации. Если задача не выполнялась в указанный период то Anacron выполняет команду, указанную в поле command через промежуток времени указанный в поле delay (в минутах). Выполнив задачу Anacron записывает дату в файл с отметкой времени и сохраняет его в каталоге /var/spool/anacron. Сохраняется только дата (не время), а значение поля job-identifier используется для формирования имени файла помещаемого в /var/spool/anacron.

Переменные окружения, такие как SHELL и PATH, задаются в начале файла конфигурации /etc/anacron, как и в файле конфигурации cron, файл конфигурации по умолчанию выглядит так:

anacrontab по умолчанию настроен на выполнение ежедневных, еженедельных и ежемесячных задач, чтобы запустить службу нужно выполнить команду:

Демон crond каждую минуту проверяет есть ли задача.
Эта задача определяется в конфигурации cron, которая состоит из нескольких файлов, работающих вместе для предоставления нужной информации нужному сервису в нужное время.

По-умолчанию демон crond запускается вместе с системой. Тем не менее статус можно проверить командой:

Временные интервалы cron

При планировании сервисов через cron вам нужно указать, когда именно сервисы должны быть запущены. В конфигурации crontab (которая более подробно объясняется в следующем разделе) вы используете строку времени, чтобы указать, когда следует запускать задачи.

Таблица показывает используемые поля времени и даты (в указанном порядке).


Примеры cron

Конфигурационный файл cron

  • cron-файлы в /etc/cron.d (сюда кидайте все задачи, которые должны выполняться от root);
  • Скрипты в /etc/cron.hourly, cron.daily, cron.weekly и cron.monthly;
  • Пользовательские скрипты, созданные с помощью crontab -e или если вы залогинились под root, то crontab -e -u имя_пользователя.

Пример, как выглядит задача в каталоге /etc/cron.d
Если вы хотите поэкспериментировать с тем, как работает cron, вы должны выделить достаточно времени для этого. Служба crond считывает свою конфигурацию каждую минуту, после чего новые задания могут быть запланированы для выполнения на следующую минуту.

Для начала, задания cron могут быть запущены для определенных пользователей. Чтобы создать пользовательское задание cron, введите crontab -e после входа в систему от имени этого пользователя или от имени root crontab -e -u username.

Когда вы используете crontab -e, редактор vi открывается и создает временный файл. После того, как вы отредактируете конфигурацию cron, временный файл будет перемещен в его окончательное местоположение в каталоге /var/spool/ cron. В этом каталоге файл создается для каждого пользователя. Эти файлы никогда не должны редактироваться напрямую! Когда файл сохраняется crontab -e, он активируется автоматически.

Если вы хотите добавить задания cron, которые не привязаны к конкретной учетной записи пользователя (и которые по этой причине по умолчанию будут выполняться как root, если не указано иное), добавляйте их в каталог /etc/cron.d. Просто поместите файл в этот каталог (точное имя не имеет значения) и убедитесь, что он соответствует синтаксису типичного задания cron. В листинге 1 вы можете увидеть пример файла конфигурации /etc/cron.d/unbound-anchor (который был вставлен в каталог /etc/cron.d после установки сервера DNS).

Листинг 1
Этот пример файла содержит три элемента. Сначала указывается время, когда команда запускается в 3:10 утра первого числа каждого месяца. Затем конфигурация указывает, что команда должна быть запущена пользователем unbound. Последняя часть имеет фактическую команду, которую нужно запустить с некоторыми аргументами, специфичными для этой команды, и показать, как эту команду следует использовать.

  • /etc/cron.hourly
  • /etc/cron.daily
  • /etc/cron.weekly
  • /etc/cron.monthly

Понимание цели anacron

Чтобы обеспечить регулярное выполнение задания, cron использует сервис anacron. Эта служба обеспечивает запуск ежечасных, ежедневных, еженедельных и ежемесячных заданий cron независимо от того, в какое точное время. Чтобы определить, как это сделать, anacron использует файл /etc/anacrontab. В листинге 2 показано содержимое файла /etc/anacrontab, который используется для указания того, как должны выполняться задания anacrontab.

Листинг 2
В /etc/anacrontab выполняемые задания указываются в строках, содержащих три столбца, как показано в листинге 2. В первом столбце указывается частота выполнения задания, выраженная в днях. Во втором столбце указывается, как долго anacron ожидает выполнения задания, а в последней части указывается команда, которая должна быть выполнена.

Нелегко получить обзор всех заданий cron, фактически запланированных к выполнению. Нет единой команды, которая бы показывала все запланированные на данный момент задания cron. Команда crontab -l выводит список заданий cron, но только для текущей учетной записи пользователя.

Управление доступом к конфигурированию cron

По умолчанию все пользователи могут создавать задания cron. Можно ограничить пользователя, которому разрешено планировать задания cron, используя файлы конфигурации /etc/cron.allow и /etc/cron.deny. Если файл cron.allow существует, в нем должен быть указан пользователь, чтобы иметь возможность использовать cron. Если файл /etc/cron.deny существует, пользователь не должен быть указан в нем.

Пример настройки на выполнение запланированных задач через cron

1. Зайдите под root. Введите cat /etc/crontab, чтобы получить представление о содержимом файла конфигурации /etc/crontab.

2. Введите crontab -e. Это открывает интерфейс редактора, который по умолчанию использует vi в качестве редактора. Добавьте следующую строку:
3. Введите команду :wq! закрыть сеанс редактирования и записать изменения.

4. Выполните cd /etc/cron.hourly. В этом каталоге создайте файл сценария с именем eachhour, который содержит следующую строку:
5. Выполните chmod +x eachhour, чтобы сделать скрипт исполняемым.

6. Теперь переключитесь на каталог /etc/crond.d и в этом каталоге создайте файл с именем eachhour. Скопируйте в файл следующее содержимое:
7. Сохраните изменения в файле конфигурации и перейдите к следующему разделу. (Для достижения оптимального эффекта выполните последнюю часть этого примера через пару часов.)

Конфигурирование at

Принимая во внимание, что cron используется для планирования заданий, которые должны выполняться на регулярной основе, служба atd доступна для служб, которые должны выполняться только один раз. На RHEL 7/CentOS 7 служба atd доступна по умолчанию, поэтому все, что нужно сделать, — это планирование заданий.

Чтобы запустить задание через службу atd, вы должны использовать команду at, а затем время выполнения задания. Это может быть определенное время at 14:00, но это также может быть указание времени, например, at teatime или at noon. После того, как вы введете одну из этих команд, откроется оболочка at. Из этой оболочки вы можете ввести несколько команд, которые будут выполнены в указанное время. После ввода команд используйте Ctrl + D, чтобы выйти из оболочки.

После планирования заданий с помощью at вы можете использовать команду atq (q как очередь), чтобы получить обзор всех заданий, запланированных на данный момент. Также возможно убрать текущее задание. Для этого используйте команду atrm, за которой необязательно следует номер задания at, которое вы хотите удалить. В примере ниже вы узнаете, как работать с at, чтобы планировать выполнение заданий в определенное время.

Пример работы с at

1. Введите systemctl status atd. В строке, которая начинается с Loaded:, эта команда должна показать вам, что служба в данный момент загружена и включена, что означает, что она готова начать получать задания.

2. Введите at 15:00 (или замените на любое время, близкое ко времени, в которое вы работаете над этим примером).

3. Введите logger message from at. Используйте Ctrl+D, чтобы закрыть оболочку.

4. Введите atq, чтобы убедиться, что задание действительно запланировано.

Мега бубен для nix админа

Итак, что же именно делает этот самый cron. Демон активируется с интервалом в одну минуту, проверяет файлы crontab и запускает указанные в них программы. Изначально он применяется в ходе работ по поддержанию системы, но пользователь может использовать его для решения своих задач.

Если у вас установлен обычный дистрибутив, то вам не о чем беспокоится, cron инсталлируется автоматически. Если же минимальный, то не расстраиваемся — идём в терминал.

Доступ юзерам к демону, настраивается в каталоге /var/spool/cron/tabs/user. Их права задаются в файлах /cron/allow и /deny. Добавляя пользователя в /allow мы разрешаем ему выполнять команду cron, а если добавить пользователя в /deny, то наоборот, пользователю будет запрещено пользоваться демоном.

Сам cron настраивается в каталоге /etc/crontab. Файл /crontab или файлы в /etc/cron. d содержат список команд, предназначенных для выполнения. Синтаксис таков:

Если в любом из первых пяти полей стоит символ *, то это поле игнорируется. В предыдущей команде не указаны ни месяц, ни неделя, следовательно, она будет выполнятся каждые 15 минут. Чтобы изменить конфигурацию воспользуйтесь в терминале командой vi или вручную измените содержание файла /etc/crontab.

Работа с .hourly, .daily, .weekly, .monthly

По умолчанию почти во всех дистрибутивах, файл /etc/crontab содержит всего несколько записей, необходимых для выполнения сценариев:
/etc/cron.hourly/* — сценарии выполняющиеся каждый час
/etc/cron.daily/* — сценарии выполняющиеся каждый день
/etc/cron.weekly/* — сценарии выполняющиеся каждую неделю
/etc/cron.monthly/* — сценарии выполняющиеся каждый месяц

Чтобы демон выполнял ваши команды, добавьте сценарий выполняющий команды в один из каталогов. Не забудьте установить бит execute(chmod a+x файл). Если вы этого не сделаете, то у вашего сценария просто не будет доступа и он выполнятся не будет!
Для проверки, будет ли запускаться ваш сценарий, выполните команду

Если сценарий расположен в другом каталоге, то соответственно меняйте daily на monthly и т.д.
И помните, в имени сценария не может быть точек, любые символы, кроме точек. Команда run-parts просто-напросто игнорирует сценарии с точкой, не знаю почему.

Читайте также: