crontab(5)

CRONTAB(5) File Formats Manual CRONTAB(5)

ИМЯ

crontabтаблицы, управляющие работой демона cron

ОПИСАНИЕ

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

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

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

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

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

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

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

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

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

В системах семейства BSD переменная LOGNAME может называться USER. В OpenBSD cron(8) определяет обе переменные USER и LOGNAME (задавая им одинаковые значения).

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

Команды cron

Формат команд cron(8) аналогичен стандарту V7 и является совместимым с ним. Каждая стока в системном crontab состоит из шести полей и команды:

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

Каждая стока в пользовательском crontab состоит из пяти полей и команды:

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

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

поле
допустимые значение
-----
--------------
минута
* или 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(8) запускает команды когда значения полей минута, час, месяц и хотя бы одно из полей Faчисло и день_недели, совпадают с текущим временем (см. замечание ниже). Демон cron(8) сверяет директивы crontab с текущим временем раз в минуту.

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

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 * * * *".

ПРИМЕРЫ

# использовать для запуска команд /bin/sh
# не обращая внимание на то, что написано в /etc/passwd
SHELL=/bin/sh
# отправлять вывод выполнения команд по электронной почте пользователю `paul'
# не обращая внимания на то, чей это crontab
MAILTO=paul
#
# запускать пять минут пополуночи, каждый день
5 0 * * *       $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# запускать в 14:15 первого числа каждого месяца
15 14 1 * *     $HOME/bin/monthly
# запускать в 22.00 каждый рабочий день, назло Джо
0 22 * * 1-5	mail -s "Уже 10 вечера" joe%Joe,%%Где твои дети?%
23 0-23/2 * * * echo "запуск в 00:23, 2:23, 4:23 ..., каждый день"
5 4 * * sun     echo "запуск в 4:05 каждое воскресенье"

СМ. ТАКЖЕ

crontab(1), cron(8)

НЕСТАНДАРТНЫЕ ВОЗМОЖНОСТИ

При задании дня недели, и 0 и 7 соответствуют воскресенью. BSD и ATT не поддерживают такое поведение.

Можно указывать одновременно и списки и диапазоны в одном и том же поле. “1-3,7-9” не будет принято cron систем ATT и BSD u043E]ни допускают только либо “1-3”, либо “7,8,9”

Диапазоны можно указывать с пропусками, например “1-9/2” соответствует “1,3,5,7,9”.

Допустимо указание месяцев или дней недели по имени.

В crontab можно задавать переменные среды. В BSD и ATT, среда для дочерних процессов определяется файлом /etc/rc

Вывод команд отсылается почтой владельцу файла crontab (в BSD это невозможно), а также может отправляться кому-либо другому (это невозможно в SysV), либо отправка может быть вообще отключена (это также невозможно в SysV).

Любая из команд с префиксом ‘@’ может заменять первые пять полей файла.

АВТОР

Paul Vixie ⟨vixie@isc.org⟩

Николай Шафоростов <shafff@ukr.net> 2007

17 июня 2004 Linux 6.12.85-6.12-alt1