5.2 Crontab

Crontab — таблицы, управляющие работой службы cron. Файл содержит инструкции службы cron в общей форме: запускать указанную команду в заданное время и в заданные дни. На компьютере обычно имеются общесистемный файл (/etc/crontab) и индивидуальные файлы (/var/cron/tabs/<имя_пользователя>) для пользователей системы. Таким образом, команды в файле будут выполняться с правами этих пользователей или, в случае общесистемного файла, с правами пользователя, указанного в командной строке при запуске службы. У служб Uucp и News обычно есть свои собственные crontab, устраняющие необходимость в явном запуске su в рамках команды cron.

Примечание! Хотя cron, по сути, является обыкновенным текстовым файлом, он не должен редактироваться обычными средствами. Для создания, изменения и удаления следует использовать специальную утилиту — crontab.

Пустые строки, ведущие пробелы и символы табуляции игнорируются. Строки, начинающиеся с символа «#», считаются комментариями и игнорируются. Заметьте, что комментарии не допускаются в тех же строках, где расположены команды cron, так как они будут распознаны как части команды. По этой же причине комментарии не разрешены в строках, задающих переменные среды.

Строка-директива представляет собой либо задание переменной среды, либо команду cron.

Задание переменной среды:

Можно определять среду (набор переменных среды), в которой будет выполняться команда. Задание переменной среды осуществляется в следующей форме:

<имя_переменной> = <значение>

где пробелы вокруг знака равенства («=») не обязательны, и любые пробелы после <значения> будут использованы как часть значения переменной <имя_переменной>. Строка <значение> может быть заключена в кавычки (одинарные или двойные) для возможности сохранения пробелов в начале и конце.

Несколько переменных среды устанавливаются автоматически службой cron. SHELL устанавливается в /bin/sh, а LOGNAME и HOME определяются по файлу /etc/passwd (в соответствии с владельцем crontab). Значения переменных HOME и SHELL можно переопределить директивами crontab.

В дополнение к LOGNAME, HOME и SHELL cron может использовать переменную MAILTO в случаях, если в данном crontab была указана отправка почты. Если MAILTO определена (и не пуста), электронная почта отправляется указанному в переменной пользователю. Если MAILTO определена, но пустая (MAILTO = ‘ ‘), электронная почта отправляться не будет. В противном случае, почта посылается владельцу crontab. Эта переменная полезна при запуске команд от псевдопользователей, для которых не определены почтовые адреса в системе.

Команды cron:

Формат команд cron аналогичен стандарту V7 и является совместимым с ним. Существует две конфигурации cron: системная и пользовательская. Общесистемная настройка crontab работает безусловно для всех пользователей РЕД ОС. Пользовательская настройка является дополнительной и выполняется в сессиях пользователей.

Каждая стока в системной конфигурации cron, расположенной в каталоге /etc, состоит из шести полей и команды:

<минута> <час> <число> <месяц> <день_недели> <пользователь> <команда>

Каждая строка в пользовательской конфигурации cron, расположенной в домашнем каталоге пользователя, состоит из пяти полей и команды:

<минута> <час> <число> <месяц> <день_недели> <команда>

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

Поле Допустимые значения
<минута> * или 0-59
<час> * или 0-23
<число> * или 1-31
<месяц> *, 1-12 или имя месяца (см. ниже)
<день-недели> *, 0-7 или имя дня (воскресенье — это 0 и 7)
<пользователь> имя существующего пользователя
<команда> строка

Допустимо указание нескольких значений (и диапазонов через тире) через запятую. Примеры:

‘ ‘1 , 2, 5 , 9’ ‘ ‘ ‘0-4, 8-12’ ‘.

Диапазон указывается как два числа, разделенных дефисом. Указываемые числа включаются в диапазон. Например, значение поля <час> 8-11 приведёт к выполнению команды в 8, 9, 10 и 11 часов.

При указании диапазона можно пропускать некоторые его значения, указав шаг в форме /<число>. Например: «0-23/2» для поля <час> означает запуск команды через два часа (по стандарту V7 пришлось бы указывать «0,2,4,6,8,10,12,14,16,18,20,22»). Шаг можно указывать также после звёздочки: «каждые два часа» соответствует значению «*/2».

Звёздочка («*») без шага соответствует полному диапазону значений.

Для задания полей <месяц> и <день_недели> можно использовать имена. Указывайте первые три буквы нужного дня или месяца на английском, регистр букв не имеет значения. Диапазоны или списки имён не разрешены.

Поле <команда> (остаток строки) определяет запускаемую по расписанию команду. Вся оставшаяся часть строки до символа перевода строки или символа «%», будет выполнен вызов /bin/sh или другой оболочки, определенной в переменной SHELL в crontab. Знак процента («%») в команде (если он не экранирован обратной косой чертой («\»)) будет соответствовать символу перевода строки и все данные после первого «%» будут посланы для команды на стандартный ввод.

Служба cron запускает команды, когда значения полей <минута>, <час>, <месяц> и хотя бы одно из полей <число> и <день_недели>, совпадают с текущим временем (см. замечание ниже). Служба cron сверяет директивы с текущим временем раз в минуту.

Замечание
День выполнения команды может быть задан в двух полях — <число> и <день_недели>. Если оба поля определены (т.е. не равны «*»), то команда будет запущена, когда любое поле совпадёт с текущим временем. Например, запись:

30 4 1,15 * 5

приведёт к выполнении команды в 4:30 по полуночи первого и пятнадцатого числа каждого месяца, плюс в каждую пятницу.

Вместо первых пяти полей допустимо указание одного из восьми специальных триггеров:

Строка Значение
@reboot Выполнить команду один раз, при запуске cron(8).
@yearly Выполнять команду каждое 1 января, «0 0 1 1*»
@annually (эквивалентно @yearly).
@monthly Выполнять команду в начале каждого месяца, «0 0 1 * *»
@weekly Выполнять команду каждое воскресенье, «0 0 * * 0».
@daily Выполнять команду в полночь, «0 0 * * *».
@midnight (эквивалентно @daily).
@hourly Выполнять команду раз в час, «0 * * * *».

Если вы нашли ошибку, выделите текст и нажмите Ctrl+Enter.

Print Friendly, PDF & Email