Ликбез по 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, но и для более лёгкого запуска программ с графическим интерфейсом. Так как такие программы требуют дополнительных параметров запуска, что для новичков может оказаться поначалу затруднительным.

Михаил АСТАПЧИК

Версия для печатиВерсия для печати

Номер: 

13 за 2011 год

Рубрика: 

На заметку
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!