Anacron linux что это
Планировщики Cron и Anacron
В Linux (и в целом в Unix) предусмотрены два планировщика запуска скриптов по расписанию — Cron (синхронный) и Anacron (асинхронный или анахроничный).
Если Cron предназначен для периодического запуска задач в заданный МОМЕНТ времени, то Anacron выполняет задачи в указанный ИНТЕРВАЛ времени.
Про Cron знают все и он устанавливается в любой системе по умолчанию. Anacron же не всегда доступен по умолчанию и известен не всем. Он удобен тогда, когда некий скрипт нужно обязательно запустить в течение дня, недели или месяца, при этом сам момент запуска значения не имеет. Это бывает необходимо, если компьютер периодически приходится выключать. Anacron «просыпается» каждый час и проверяет, был ли выполнен в указанный интервал времени скрипт, заданный в файле конфигурации /etc/anacrontab, и если нет, то выполняет его.
Пересмотрев все файлы и директории конфигурации 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
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 заново — проблемы снимутся сами собой.
Планирование рутинных задач Linux при помощи Cron и Anacron
Что такое Cron?
Cron – это утилита планирования, которая позволяет предварительно установить время запуска задач. Входя в базовый набор инструментов, утилита Cron может быть использована для автоматизации почти всех задач системы, которые должны происходить на регулярной основе.
Одинаково умелый в управлении задачами, которые нужно выполнять ежечасно или ежедневно, и крупными программами, которые необходимо запустить один или два раза в год, cron является важным инструментом для системного администратора.
Данное руководство описывает использование cron с помощью командной строки, а также чтение конфигурационного файла данного инструмента. Оно также включает изучение anacron, инструмента, который можно использовать, чтобы убедиться, что задачи выполняются, даже когда сервер некоторое время выключен.
Руководство использует Ubuntu 12.04 VPS, но любой современный дистрибутив Linux работает таким же образом.
Как работает Cron
Cron запускается при загрузке и работает в фоновом режиме как демон. Это означает, что он работает без вмешательства пользователя и ждет определенных «событий», чтобы начать действовать.
В случае cron, эти события – определенные моменты времени. Крон работает в фоновом режиме и проверяет свой конфигурационный файл каждую минуту, чтобы узнать, планируется ли действие именно сейчас.
Если событие было запланировано, cron выполняет все предварительно заданные команды, а затем возвращается в фоновый режим до следующей минуты. Если событие не было запланировано, он ждет 60 секунд и проверяет файл снова.
Благодаря поминутному планированию этот инструмент очень гибок. После установки дистрибутива Linux cron уже сконфигурирован запускать множество задач.
Чтение Crontab
Cron решает, какие команды когда запускать, читая серии файлов под названием crontab. Общесистемный crontab можно просмотреть в «/etc/crontab»:
Это системный crontab, который в большинстве случаев не нужно редактировать. Для повседневной работы лучше использовать собственный crontab, так как изменения, внесенные в системный crontab, будут потеряны во время обновления файловой системы.
В файле есть несколько частей, в которых следует разобраться.
Первые две строки указывают оболочку, которая будет выполнять перечисленные команды, и путь для проверки программ.
Остальная часть файла определяет фактические команды и планирование. Каждая строка в этом списке представляет собой запись или строку в таблице. «tab» в crontab означает «table» (таблица). Каждая ячейка таблицы разделена двоеточием или табами.
Закомментированная строка в верхней части таблицы подсказывает, что содержится в колонках:
# m h dom mon dow user command
Планирование часов и минут с Cron
Первая колонка содержит минуты (0-59) часа запуска команды. Вторая колонка содержит часы (0-23), в которые нужно запустить команду. Символ звездочки (*) означает «все возможные значения» и используется как шаблон.
При совмещении этих двух колонок можно получить значение времени для команды. К примеру, если во второй колонке указано 25, а в первой 6, то:
Это значит, что вторая строка должна быть запущена в 6:25 утра.
Аналогично, первая строка означает, что команда должна запускаться каждый час на 17-й минуте:
То есть, она будет запущена в 1:17, 2:17, 3:17, и т.д.
Планирование дней
Третья, четвертая и пятая колонки определяют дни, в которые должна быть запущена команда. Третья колонка указывает день месяца от 1 до 31(будьте осторожны при планировании дней в конце месяца, так как не все месяцы имеют одинаковое количество дней).
Четвертая колонка указывает, в котором месяце нужно запустить команду (1-12), а пятая указывает день недели со значениями от 0 до 7 (0 и 7 означают воскресенье). Пятая колонка дает возможность планировать по неделям, а не по месяцам.
Если столбец дня недели и дня месяца содержат значения, которые не являются специальными символами, то команда будет запущена согласно значениям каждого столбца.
Дни недели и месяца можно также указать при помощи первых трех букв их названий. Также можно указывать диапазоны при помощи дефиса (-) и устанавливать несколько значений через запятую.
Интервал можно указать, устанавливая после значения символ /, а затем число. К примеру, чтобы выполнять команду каждый второй час, нужно установить значение «*/2» в колонке часов.
Посмотрев в crontab, можно увидеть, что третья запись запускается каждое воскресенье в 6:47 утра:
Четвертая строка запускается в первый день месяца в 6:52 утра:
Горячие клавиши планирования cron
Первые пять столбцов каждой записи можно заменить горячими клавишами. Синтаксис: символ «@» с указанием имени интервала.
К примеру, можно спланировать запуск команды каждую неделю, указав @weekly вместо создания отдельного столбца конфигураций. Также можно использовать @yearly, @monthly, @daily и @hourly.
Также есть специальный ярлык @reboot, который запускается сразу после запуска cron. Как правило, это происходит только при запуске системы, и именно поэтому его называют restart, а не cron-restart или подобно.
Имейте в виду, что эти ярлыки не обеспечивают точного контроля времени своего запуска. Они запускаются в первый же момент совпадения времени.
К примеру, «@monthly» запускается в полночь первого дня месяца. Это может привести к тому, что многие команды, время запуска которых указано ярлыками, будут запущены в одно и то же время. Такие события нельзя контролировать так, как обычный синтаксис планирования.
Указывание команд и пользователей с Cron
Следующие столбцы касаются непосредственного выполнения запланированных команд.
Шестая колонка, которая находится только в системном crontab, называет пользователя, который должен выполнить команду.
В последней колонке указывается собственно команда, которую необходимо выполнить. Команда может содержать символ %, который означает, что все, что указано после первого такого символа передается команде в качестве стандартного ввода.
Каждая запись должна заканчиваться символом новой строки. Это не проблема для большинства записей, но, все же, стоит убедиться, что за последней записью есть пустая строка, иначе команда не будет работать должным образом.
Использование команды run-parts и каталогов Cron
Если посмотреть на команды, указанные в системном crontab, можно увидеть упоминание о «anacron», который будет описан позже, и «run-parts».
Команда run-parts – это простая команда, которая запускает каждый исполняемый файл, расположенный внутри указанной директории. Она часто используется вместе с cron, поскольку это позволяет запускать несколько сценариев в указанное время, помещая их в одном месте.
Это очень удобно, так как позволяет оставить crontab простым, и в то же время вносить дополнительные скрипты, просто поместив их в систему или связав их в соответствующий каталог вместо редактирования crontab.
По умолчанию большинство дистрибутивов создают папки для каждого интервала, в которых размещаются скрипты или ссылки скрипты, которые нужно запустить в этом интервале.
К примеру, Ubuntu создает папки по имени «cron.daily», «cron.hourly», «cron.monthly» и «cron.weekly», в которых хранятся соответствующие скрипты.
Индивидуальные Crontab-файлы пользователя
Разобравшись с синтаксисом cron, можно использовать его для планирования задач пользователя. Это делается при помощи команды «crontab».
Поскольку команды в crontab пользователя будут запускаться с привилегиями данного пользователя, столбец «user» в индивидуальных crontab’ах не существует.
Чтобы увидеть текущий crontab, введите:
Вероятнее всего, такого файла не существует, если только он не был создан вручную. Если crontab есть, полезно будет сделать его резервную копию перед редактированием, чтобы иметь возможность отменить изменения.
Чтобы сохранить резервную копию в домашнем каталоге, наберите:
Чтобы отредактировать crontab, наберите:
Если появилось извещение, как при первом использовании команды, выберите предпочтительный редактор, чтобы продолжить.
Откроется закомментированный файл, который можно отредактировать, чтобы создать свои собственные правила.
К примеру, если бы в файле нужно было повторять (echo) команду «date» каждые 15 минут каждую среду, то нужно было бы внести такую строку:
*/15 * * * 3 echo «$(date)» >> /home/demouser/file
Затем можно сохранить файл, и, запустив «crontab –l», увидеть только что созданное правило:
Если нужно отредактировать crontab конкретного пользователя, можно добавить опцию «-u username». Это можно сделать только как root или как пользователь с root-привилегиями.
К примеру, если нужно что-либо внести в crontab «root», используйте:
Использование Anacron
Один из самых больших недочетов Cron заключается в том, что он предполагает, что сервер или компьютер всегда включен. Если в установленное время выполнения задачи машина выключена, задача не будет запущена.
Это серьезная проблема для систем, которые не могут быть включены постоянно. Потому был разработан инструмент под названием anacron. Anacron значит «анахронический», и используется для устранения этого недочета cron.
Anacron использует не такие подробные параметры, как cron. Наименьший интервал, который существует в anacron – это день. Это значит, что anacron нужно использовать как дополнение к cron, а не как замещение его.
Преимущество anacron состоит в том, что он пользуется временными метками для файлов, чтобы узнать, когда команды были выполнены в последний раз. Это значит, что если задача должна выполняться ежедневно, но компьютер был выключен в течение времени, когда anacron запускается, то он может увидеть, что задача была запущена в последний раз более 24 часов назад, и выполнит ее правильно.
Утилита anacron, как и cron, имеет таблицу планирования. Она имеет соответственное название «anacrontab» и также находится в каталоге «/etc». Рассмотрим ее формат:
Как можно заметить, ее формат похож на формат файла crontab, но она содержит меньшее количество столбцов, а также имеет некоторые отличия.
Первый столбец определяет, как часто команда должна быть запущена. Значение указывается в виде интервала в днях. Значение «1» будет работать каждый день, а значение «3» – каждые три дня.
Второй столбец определяет отсрочку выполнения команды. Дело в том, что Anacron – не демон. Он запускается в одно и то же время. Данное поле позволяет расположить выполнение команд таким образом, чтобы не все команды были запущены в одно и то же время.
К примеру, первая строка запускается каждый день через 5 минут после запуска anacron:
Следующая строка запускается каждую неделю через 10 минут после вызова anacron:
Третья колонка содержит имя, по которому работа будет известна в сообщениях и лог-файлах Anacron. Четвертое поле – команда, запущенная в данный момент.
Как видно, anacron запускает некоторые из скриптов cron. Разные дистрибутивы обрабатывают это столкновение по-разному, отдавая предпочтение одной из команд и отключая действия другой.
К примеру, на Ubuntu «/etc/crontab» проверяет, доступен ли в системе anacron, и затем выполняет скрипты каталогов «cron.*» с помощью cron, если anacron не был найден.
Другие дистрибутивы указывают cron обновлять временные отметки Anacron при каждом запуске этих каталогов, чтобы anacron не выполнял их при запуске.
Итоги
Cron и anacron – очень полезные инструменты автоматизации процессов. Понимание того, как использовать их сильные стороны и обойти их слабости, позволяет использовать их легко и продуктивно.
Хотя синтаксис конфигурации на первый взгляд кажется запутанным, эти инструменты помогут сэкономить время в будущем; кроме того, их, как правило, не нужно часто редактировать.
Блог о системном администрировании. Статьи о Linux, Windows, СХД NetApp и виртуализации.
В /etc/crontab задания выполняются с помощью команды run-parts, которая запускает скрипты и программы из указанных каталогов (/etc/cron.hourly, /etc/cron.daily и т.д.). Каждая строка запускает из соответствующего каталога задания ежечасно, ежедневно, еженедельно и ежемесячно, соответственно строкам сверху вниз. Обратите внимание, что все команды здесь запущены от имени пользователя root. Заметьте также, что crontab может содержать присваивания значений переменным shell, которые будут установлены перед запуском команды.
Так же, если необходимо запускать какие-то команды по особому расписанию (не ежечасно, ежедневно, еженедельно и ежемесячно), то таблицы заданий помещаются в каталог /etc/cron.d/.
Каждый пользователь системы имеет свой файл заданий crontab, в котором описано, в какое время и какие программы запускать от имени этого пользователя. Для редактирования файла crontab используется специальная одноименная программа crontab, позволяющая не прерывать процесс cron на время редактирования. Редактировать вручную таблицы cron не рекомендуется. Файлы таблиц планировщика cron для пользователей могут храниться в следующих каталогах:
Каждая строка планировщика имеет следующий формат:
Для указанных выше первых 5 полей, можно использовать звездочку (*), что означает все допустимые значения. Например, если поставить звёздочку в значении месяца, команда будет выполняться каждый месяц во время, указанное другими параметрами.
Дефис (-) между целыми числами обозначает диапазон чисел. Например, 1-4 означает целые числа 1, 2, 3 и 4.
Список значений, разделенных запятыми (,), обозначает перечень. Например, перечисление 3, 4, 6, 8 означает четыре указанных целых числа.
Вся оставшаяся часть строки до символа перевода строки или символа %, будет выполнен вызов /bin/sh или другой оболочки, определенной в переменной SHELL в crontab Знак процента (`%’ ) в команде (если он не экранирован обратной косой чертой (`\’ ) ) будет соответствовать символу перевода строки и все данные после первого `%’ будут посланы для команды на стандартный ввод.
Пример crontab-файла:
anacron
anacron — (англ. anachronistic cron) асинхронный или анахроничный cron. Anacron в отличие от cron не поддерживает запуск заданий по расписанию, вместо этого задания запускаются с заданным интервалом времени. Это очень удобно для систем которые работают не регулярно, например домашние рабочие станции или ноутбуки. Anacron хранит метки времени файлов в /var/spool/anacron, чтобы записывать время выполнения заданий. При запуске anacron проверяет, прошло ли необходимое количество дней с тех пор, как задача была выполнена в последний раз, и при необходимости запускает ее. Задачи anacron хранятся в конфигурационном файле /etc/anacrontab. Синтаксис данного файла аналогичен /etc/crontab, за исключением полей таблиц:
Период — период выполнения в днях. Задержка — задержка запуска в минутах. Идентификатор задания — любой непустой символ, кроме / \. Задержка чаще всего используется для того чтобы позволить системе полностью загрузиться.
На сегодня все. Давайте подведем маленький итог тому что сегодня узнали:
Так же есть чудо-средство anacron, которое сравнивает не текущее время со временем задания в crontab, а сколько прошло времени с последнего запуска задания, указанного в /etc/anacrontab и если прошел указанный промежуток времени, то задание запускается.
cron и anacron
Конфигурирование crond
Демон crond каждую минуту проверяет есть ли задача.
Эта задача определяется в конфигурации cron, которая состоит из нескольких файлов, работающих вместе для предоставления нужной информации нужному сервису в нужное время.
По-умолчанию демон crond запускается вместе с системой. Тем не менее статус можно проверить командой:
Временные интервалы cron
При планировании сервисов через cron вам нужно указать, когда именно сервисы должны быть запущены. В конфигурации crontab (которая более подробно объясняется в следующем разделе) вы используете строку времени, чтобы указать, когда следует запускать задачи.
Таблица показывает используемые поля времени и даты (в указанном порядке).
Если вместо значения указать *, то значение будет любым.
Примеры cron
Нет необходимости запоминать всё это. Достаточно посмотреть все возможные примеры в man 5 crontab.
Конфигурационный файл cron
Пример, как выглядит задача в каталоге /etc/cron.d
Если вы хотите поэкспериментировать с тем, как работает cron, вы должны выделить достаточно времени для этого. Служба crond считывает свою конфигурацию каждую минуту, после чего новые задания могут быть запланированы для выполнения на следующую минуту.
Если вы хотите добавить задания cron, которые не привязаны к конкретной учетной записи пользователя (и которые по этой причине по умолчанию будут выполняться как root, если не указано иное), добавляйте их в каталог /etc/cron.d. Просто поместите файл в этот каталог (точное имя не имеет значения) и убедитесь, что он соответствует синтаксису типичного задания cron. В листинге 1 вы можете увидеть пример файла конфигурации /etc/cron.d/unbound-anchor (который был вставлен в каталог /etc/cron.d после установки сервера DNS).
Листинг 1
Этот пример файла содержит три элемента. Сначала указывается время, когда команда запускается в 3:10 утра первого числа каждого месяца. Затем конфигурация указывает, что команда должна быть запущена пользователем unbound. Последняя часть имеет фактическую команду, которую нужно запустить с некоторыми аргументами, специфичными для этой команды, и показать, как эту команду следует использовать.
Понимание цели anacron
Чтобы обеспечить регулярное выполнение задания, cron использует сервис anacron. Эта служба обеспечивает запуск ежечасных, ежедневных, еженедельных и ежемесячных заданий cron независимо от того, в какое точное время. Чтобы определить, как это сделать, anacron использует файл /etc/anacrontab. В листинге 2 показано содержимое файла /etc/anacrontab, который используется для указания того, как должны выполняться задания anacrontab.
Листинг 2
В /etc/anacrontab выполняемые задания указываются в строках, содержащих три столбца, как показано в листинге 2. В первом столбце указывается частота выполнения задания, выраженная в днях. Во втором столбце указывается, как долго anacron ожидает выполнения задания, а в последней части указывается команда, которая должна быть выполнена.
Управление доступом к конфигурированию cron
Пример настройки на выполнение запланированных задач через cron
1. Зайдите под root. Введите cat /etc/crontab, чтобы получить представление о содержимом файла конфигурации /etc/crontab.
4. Выполните cd /etc/cron.hourly. В этом каталоге создайте файл сценария с именем eachhour, который содержит следующую строку:
5. Выполните chmod +x eachhour, чтобы сделать скрипт исполняемым.
6. Теперь переключитесь на каталог /etc/crond.d и в этом каталоге создайте файл с именем eachhour. Скопируйте в файл следующее содержимое:
7. Сохраните изменения в файле конфигурации и перейдите к следующему разделу. (Для достижения оптимального эффекта выполните последнюю часть этого примера через пару часов.)
8. Через пару часов введите grep wrote /var/log/messagesи прочитайте записанные сообщения, которые проверяют правильность работы cron.
Конфигурирование 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, чтобы убедиться, что задание действительно запланировано.