Автоматизация рутинных задач – ключ к спокойствию системного администратора, да и к тому же более эффективное использование рабочего времени. Рассмотрение в этом контексте возможностей и нюансов использования планировщиков задач в Debian является вполне закономерным. В этой статье – следующей из серии “Шпаркалка сисадмина” – будут рассмотрены планировщик cron и асинхронный планировщик anacron.
cron – демон, основная задача которого – выполнение запланированных задач.
crontab – программа, используемая для поддержки (создания, удаления, модификации) файлов crontab (располагаются в /var/spool/cron/crontabs) индивидуально для каждого пользователя системы.
anacron – асинхронный (анахроничный) cron; является аналогом cron, только задания выполняет не по расписанию, а через заданные интервалы времени.
Теперь обо всем подробнее.
Cron 1 запускается процессом init из /etc/init.d во время загрузки системы. Основной конфигурационный файл – /etc/crontab. Каждую минуту сron просматривает содержимое каталога /var/spool/cron/crontabs на предмет файлов crontab и если находит их (или обнаруживает, что изменилось время модификации существующих файлов), то загружает (или обновляет, в случае с изменением существующих файлов) их в оперативную память. Эта особенность работы позволяет обойти необходимость перезапуска демона при изменении запланированных задач. Изменять файлы в каталоге /var/spool/cron/crontabs вручную не рекомендуется, для этого используется команда crontab -e.
Каждую минуту cron проверяет все файлы crontab на предмет команд, которые необходимо выполнить в данный момент. После выполнения команды может быть отправлено уведомление по почте владельцу файла crontab (или пользователю, адрес которого определен в переменной MAILTO в /etc/crontab, если он вообще определен).
Также существует заранее определенное поведение планировщика при изменении времени (например переход на летнее и зимнее время) 2:
Локальные изменения времени меньше чем на 3 часа (например, переход на летнее или зимнее время) обрабатываются специальным образом. Это относится только к задачам, которые запускаются в определенное время или периодом более одного часа. Задачи, которые выполняются чаще, исполняются как обычно.
Если время было переведено вперед, задачи, которые должны были быть выполнены в течение пропущенного интервала, будут запущены немедленно. И наоборот, если время было переведено назад, принимаются меры для предотвращения запуска задачи дважды.
Изменения времени более чем на 3 часа считается коррекцией времени или временной зоны, и новое время начинает использоваться немедленно.
Применительно к Debian существует ряд различий: файлы crontab предварительно разделены на несколько каталогов в зависимости от необходимой частоты выполнения (/etc/cron.hourly – ежечасно, /etc/cron.daily – ежедневно, /etc/cron.weekly – еженедельно, /etc/cron.monthly – ежемесячно). Выполнение заданий в этих каталогах отключено, если установлен anacron (кроме ежечасного задания), чтобы предотвратить конфликты между демонами. Файлы в этих директориях должны удовлетворять ряду требований 3. Помимо каталогов упомянутых выше, в Debian можно использовать каталог /etc/cron.d, в который также можно поместить файлы с необходимыми командами и которые имеют какое-либо нестандартное расписание выполнения. Требования для файлов в каталогах идентичны.
Теперь подробнее о формате команд.
Каждая команда cron имеет следующую маску:
Допустимо указание нескольких значений через запятую или диапазон значений через тире. При необходимости можно указать шаг значений через слэш (“/”) – это можно сделать как с использованием чисел (2/3), так и с использованием звездочки (*/2). Если какое-либо из полей не используется, вместо него должна быть звездочка. Если будут указаны только звездочки и не определен ни один из временных параметров, то задание будет выполняться каждую минуту.
Anacron 4 работает несколько иным образом.
Стоить сразу отметить, что anacron по умолчанию не поставляется с дистрибутивом debian, придется его ставить отдельно.
Принципиальное отличие anacron в том, что он рассчитан на асинхронное выполнение команд. Это значит, что даже если сервер был выключен и в этот период должно было выполниться задание, оно обязательно выполнится сразу как сервер окажется включенным. Cron такой функционал предоставить не может и задания выполнены не будут, если в ожидаемое время их выполнения компьютер был выключен.
Формат команд имеет следующий вид:
Anacron предназначен не для замены, но для дополнения cron. Минимальный период выполнения команд – 1 день. При выполнении задачи создается специальный файл в каталоге /var/spool/anacron/ с отметкой времени и при следующей проверке anacron определяет когда последний раз запускалось задание и если время последнего выполнения отличается от текущего больше чем на количество дней, которое определено в команде anacron, то выполняется принудительный запуск задачи с определенной задержкой. Задержка используется главным образом для исключения ситуации одновременного выполнения ресурсоемких задач.
На этом обзор планировщиков закончен. Примеры 5 6 команд широко доступны на различных ресурсах в сети и их публикация в рамках этой статьи будет излишней.
Notes:
- Cron ↩
- cron ↩
- be executable, be owned by root, not be writable by group or other and, if symlinks, point to files owned by root. Additionally, the file names must conform to the filename requirements of run-parts: they must be entirely made up of letters, digits and can only contain the special signs underscores (‘_’) and hyphens (‘-‘). Any file that does not conform to these requirements will not be executed by run-parts. For example, any file containing dots will be ignored. This is done to prevent cron from running any of the files that are left by the Debian package management system when handling files in /etc/cron.d/ as configuration files (i.e. files ending in .dpkg-dist, .dpkg-orig, and .dpkg-new). ↩
- Anacron ↩
- Использование планировщика cron в Linux ↩
- ПЛАНИРОВАНИЕ РУТИННЫХ ЗАДАЧ LINUX ПРИ ПОМОЩИ CRON И ANACRON ↩