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.