Планировщик заданий Cron

Опубликовано mensh - чт, 06/19/2008 - 08:48

В системе Linux автоматический запуск задач выполняется демоном crond, а составлять расписания для автоматического запуска заданий могут не только администратор системы, но и пользователи.

Планировщик задач Cron и команда crontab
 

Содержание

Как работает crond

Принцип работы демона crond прост. После запуска (как правило, при загрузке системы) демон просыпается каждую минуту и проверяет, не запланирован ли запуск в  эту минуту каких-либо программ. Если такие программы находятся, демон запускает их и отправляет по электронной почте сообщения пользователям, запланировавшим запуск.

Составление расписания заданий

Составление расписания — задача несложная. Расписание размещается в  отдельном файле crontab. В каждой строке файла помещается задание, которое должно быть запущено в определенное время.

Формат записей файла crontab

Часть time-date (время-дата) состоит из пяти числовых полей, разделенных пробелами и определяющих время запуска задания:

Минуты Часы День месяца Месяц День недели
Допустимые значения: 0-59 Допустимые значения: 0-23 Допустимые значения: 0-31 Допустимые значения: 0-12. Месяц можно указать тремя первыми буквами его (английского) названия Допустимые значения: 0-7, где 0 и 7 — воскресенье

Для удобства заполнения указанных полей введены следующие правила:

  • Можно указывать значения в виде численных интервалов. К примеру, интервал 1-3 в поле часов означает 1.00, 2.00 и 3.00 пополуночи, 2-4 в поле дня недели — вторник, среду или четверг.
  • Интервалы можно задавать с шагом больше единицы. Например, чтобы указать каждый второй час, начиная с полуночи, следует установить интервал 0-23 с шагом 2 через косую черту: 0-23/2
  • Звездочка (*) указывает полный интервал значений поля — от минимального до максимального. Например, в поле дня месяца звездочка означает интервал 0-31, в поле дня недели — 0-7
  • День недели или месяц можно указать первыми тремя буквами его (английского) названия

Примеры времени—даты

Несколько примеров заполнения полей времени—даты:

0 1 * * *

Запуск задания ежедневно в 1.00 пополуночи

30 14 * * 0

Запуск задания по воскресеньям в 2.30 пополудни

0 23-7/2,8 * * *

Запуск задания каждые 2 часа с 23.00 до 7.00 и в 8.00

0 12 * 1 mоn

Запуск задания в полдень каждого понедельника января каждого года

0 12 2 feb *

Запуск задания в полдень второго февраля каждого года

Поле command

Поле command (команда) отделено от полей времени—даты одним или несколькими пробелами и простирается до конца строки. Команды обрабатываются оболочкой /bin/sh.

Например, следующая запись в файле crontab предусматривает ежедневный запуск программы /usr/sbin/backup в 1.00 пополуночи:

0 1 * * * /usr/sbin/backup

Некоторым командам (например, mail) требуется ввод информации с устройства стандартного ввода. Это указывается при помощи знака процента (%). Первый такой знак обозначает начало стандартного ввода, каждый последующий — смену строки.

Редактирование файла crontab

Файл crontab редактируется командой crontab -e. Возможны два подхода:

  • создание нового файла со всеми записями, которые должны входить в файл crontab, с последующей его записью на диск под этим именем по команде crontab;
  • непосредственное редактирование файла по команде crontab -e.

Запись из файла

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

0 1 * * * /usr/sbin/backup

Созданному файлу следует присвоить подходящее имя, например сron jobs. После того, как указанный файл создан, его содержимое необходимо записать в файл crontab командой:

~$ crontab cronjobs

Содержимое файла cronjobs полностью заменит содержимое файла crontab данного пользователя. Используя этот метод, любой пользователь может редактировать свой файл crontab. Суперпользователь обладает особым правом редактировать файлы crontab остальных пользователей. Редактирование чужого файла указывается флажком -u. Например, по команде:

~# crontab -u oleg cronjobs

файл cronjobs записывается как файл crontab пользователя oleg.

Непосредственное редактирование файла crontab

Команда crontab позволяет избежать многоступенчатой операции с созданием отдельного файла. Если ввести команду crontab с опцией -е, можно редактировать файл crontab непосредственно.

По умолчанию по команде crontab с опцией -е файл crontab загружается в редактор Vi. Редактор Vi — мощный, хотя и сложный инструмент, популярный среди опытных пользователей Unix. Тот, кто предпочитает другой редактор, например Xedit, может установить соответствующее значение переменной среды EDITOR:

~$ export EDITOR=xedit

После этого ввод команды

~$ crontab -е

приводит к открытию файла crontab в  указанном редакторе.

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

~# crontab -u user-name -e

Просмотр файла crontab

Для просмотра содержимого файла crontab вводится команда:

~$ crontab -l

Суперпользователь может просматривать файлы crontab остальных пользователей:

~# crontab -u username -l

Удаление файла crontab

Для удаления содержимого своего файла crontab пользователь вводит команду:

~$ crontab -r

Суперпользователь может удалять файлы crontab остальных пользователей:

~# crontab -u oleg -r