Ликбез по Linux
Статья про утилиту резервного копирования rsync ("КВ" №11) однозначно требует дополнения в виде рассказа о планировщиках заданий - утилитах cron, anacron и at. Эти программы предназначены для запуска задач по расписанию. С их помощью можно автоматизировать разовое или периодическое выполнение той или иной программы.
Приучаем компьютер к распорядку
Знакомясь с системными утилитами cron, anacron и at, не будем слишком много философствовать. Хотя бы потому, что сами по себе эти консольные программы представляют собой классические образчики UNIX-философии, и даже простое знакомство с ними может привести к нирване и просветлению.
Утилиты cron, anacron и at - это планировщики заданий, и они предназначены для того, чтобы автоматизировать запуск отложенных задач в нужное время. Такими задачами могут быть как простые текстовые напоминания для пользователя, так и сложные задачи системного администрирования - например, резервного копирования, с азами которого мы уже знакомились. Обычно эти три консольные утилиты уже должны присутствовать в вашей системе GNU/Linux.
Эти программы в первую очередь предназначены для сисадминов. И в былые времена доступ обычного пользователя к ним даже ограничивался. Но сейчас, имея на персональном компьютере собственную систему Linux, каждый пользователь может воспользоваться их мощью.
Различие между этими тремя утилитами состоит только в способе организации расписания для отложенного запуска задач. Если кратко, то cron позволяет запускать задачи точно по времени, anacron обеспечивает периодическое выполнение, а at организует одноразовую очередь выполняемых заданий.
А теперь рассмотрим более подробно каждую утилиту по отдельности.
Время cron
Начнём с cron (Command Run ON). Говоря по-научному, cron - это планировщик задач в UNIX-подобных операционных системах для периодического и непериодического выполнения заданий. А проще говоря, cron запускает программы по указанному пользователем специальному расписанию.
Cron работает в режиме демона, регулярно читая специальные файлы crontab, в которых и содержатся записи о задачах и о времени их выполнения. После того, как демон cron запущен и прочел содержимое всех файлов crontab, он каждую минуту проверяет, не требуется ли запуск какой-либо команды.
Каждый пользователь в системе имеет свой собственный файл заданий crontab. А все вместе эти файлы находятся в специальном каталоге. Например, в Ubuntu это каталог /var/spool/cron/crontabs.
Суперпользователь root имеет особые возможности при работе с cron. Его файл отложенных задач находится в файле /etc/crontab. Также пользователь root имеет доступ к специальным папкам /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly.
Для работы со своими файлами заданий необходимо пользоваться специальной утилитой, которая также называется crontab. Например, для редактирования своего собственного файла crontab используется команда:
crontab -e
В результате файл заданий откроется в консольном текстовом редакторе для редактирования. При первом запуске этой команды может быть предложено выбрать редактор из некоторого списка установленных в системе текстовых редакторов.
Первоначально в этом файле, кроме комментариев, помеченных символом "#", ничего быть не должно. Задания для cron нужно записывать в виде текстовой строки специального формата. Эта запись в общем случае состоит из шести полей, разделённых между собой пробелом или табуляцией:
[минута] [час] [день] [месяц] [день недели] [выполняемая команда]
Для суперпользовательского файла /etc/crontab предусмотрено ещё седьмое поле, позволяющее запускать задание от имени любого обычного пользователя системы.
То есть это очень интуитивно понятный формат. Например:
13 13 13 * 5 rsync -a work backup
В данном случае запись означает, что каждую пятницу, выпадающую на 13-е число, в 13 часов 13 минут будет выполняться резервное копирование из папки work в папку backup посредством утилиты rsync.
Приведу допустимые значения для каждого из полей времени:
Поле | Допустимое значение |
Минуты | 0 - 59 |
Часы | 0 - 23 |
День месяца | 1 - 31 |
Месяц | 1 - 12 |
День недели | 0 - 6 (0 - воскресенье) |
В качестве значений дня недели или месяца можно использовать трёхбуквенные значения на латинице.
Однако в нашем примере мы видим вместо некоторых значений звёздочки. Это значит, что вместо конкретных значений времени можно использовать шаблоны. Допускаются следующие шаблоны:
- * означает любую цифру;
- целые числа через запятую - задание дискретного множества значений;
- два целых числа, разделенные дефисом, - диапазон значений;
- косая черта "/" используется для определения шага значений. Например, значение минут 0-59/2 определяет, что задание будет запускаться каждую вторую минуту.
Таким образом, в задании можно очень гибко задавать время выполнения заданий.
Примеры:
#Напоминание о важном событии * 9 5,20 * * echo "Сегодня получка" #Каждый четный час, каждый понедельник будет выполнен script * 0-23/1 * * 1 script #Поздравит с новым годом 59 23 31 dec * echo "Happy NY!"
Чтобы просто просмотреть список заданий, совсем не нужно открывать файл crontab в режиме редактирования. Для этого можно запустить команду crontab с параметром "-l". Если нужно удалить свой crontab, то для этого имеется параметр "-r".
Периодичность anacron
Anacron (anachronistic cron) - это системный демон, который может запускать задания исключительно с определенным интервалом времени. В отличие от cron, не поддерживает запуск заданий по расписанию и не позволяет устанавливать точную дату запуска задачи.
Anacron, в отличие от cron, значительно беднее по возможностям настройки. Имеет основной файл заданий /etc/anacrontab. Формат записи задания имеет четыре поля:
[период] [задержка] [идентификатор] [команда]
Период - период выполнения в сутках. Задержка - задержка запуска в минутах. Идентификатор задания - любые непустые символы.
Например, еженедельный бэкап из папки work в папку backup может выглядеть так:
7 15 week_backup rsync work backup
Особенность работы anacron в том, что этот планировщик обязательно сработает после перерыва в работе компьютера. При запуске anacron проверит, прошло ли необходимое количество дней с тех пор, как задача была выполнена в последний раз. Если дней прошло больше, чем указано в поле "период", например, если компьютер был выключен, команда будет тут же выполнена.
Отсюда и необходимость параметра "задержка": чтобы в случае включения дать компьютеру полностью спокойно загрузиться, а уже затем выполнить задачи для anacron.
Очередь at
И последняя на сегодня утилита at предназначена для одноразового планирования выполнения команд. Команда at позволяет вам указывать точное время выполнения команд, а также создавать очередь из нескольких заданий.
Команда at запускается с параметром времени выполнения задания. Например:
at 10:30
После чего появится приглашение для записи команд. После набора очередной команды нужно нажимать <Ввод>, а набор всей очереди команд нужно завершить комбинацией клавиш <Ctrl+D>. После этого at выведет в консоль номер этого задания, время и дату его выполнения.
Аргумент времени задаётся в виде двух чисел через двоеточие - часы:минуты. По умолчанию время считается заданным в 24-часовом формате.
Что же касается даты выполнения, то по умолчанию предполагается текущий день. Дату выполнения можно задавать через знак плюс (+) с последующим указанием количества дальнейших минут, часов, дней, недель, месяцев и даже лет. Для этого надо использовать суффиксы minutes, hours, days, weeks, months, years.
Примеры:
at 12:00 + 1 week at 22:10 + 4 day
Чтобы просмотреть все текущие очереди, нужно воспользоваться опцией "-l" в команде at. Для удаления очереди нужно воспользоваться опцией "-r", указав также номер задания.
Графический режим
Для работы с консольными планировщиками существует графическая оболочка Gnome Schedule tasks. Эта утилита с несложным интерфейсом позволяет более просто вводить параметры даты и времени для cron и at.
Единственный момент, который требует пояснений: здесь при выборе задания через кнопку "создать" предлагаются типы заданий, а не сами утилиты планирования. Но по названию типов можно догадаться, какая утилита-планировщик будет использована
- тип "a task that launches recurrently" - это cron;
- тип "a task that launches one time" - это at.
Кнопка "a task from predefined template" - выбрать ранее созданный шаблон из какой-нибудь задачи.
Можно порекомендовать Gnome Schedule не только для большего удобства при работе с cron или at, но и для более лёгкого запуска программ с графическим интерфейсом. Так как такие программы требуют дополнительных параметров запуска, что для новичков может оказаться поначалу затруднительным.
Михаил АСТАПЧИК