ryg

crontab описание команды и формата файла

Синтаксис

     crontab [-u user] file
     crontab [-u user] { -l | -r | -e }

Описание

утилита crontab предназначена для управления файлами описывающими выполнения плановых задач по расписанию (далее crontab файлы). Она позволяет задать индивидуально для каждого пользователя свое расписание.
Используется для создания, редактирования и удаления таких списков впоследствии используемых утилитой cron. Crontab файлы создаются отдельно для каждого пользователя и не могут редактироваться пользователем напрямую.
Замечание для Mac OS X: Cron и crontab официально поддерживаются в ядре Darwin, но в apple Mac OS существует утилита launchd, которая предлагает более гибкое решение по автоматическому запуску команд (подробнее в команде launchctl)
 
Если существует файл /usr/lib/cron/cron.allow то пользователь должен быть там записан чтобы иметь право на использование данной команды, если же его нет, а есть файл  /usr/lib/cron/cron.deny то в нем пользователя не должно быть, иначе не будет иметь прав на пользование утилитой. Если же нет обоих файлов, то тогда зависит он настройки конфигурации системы команда будут доступна либо только супер-пользователю (root), либо всем пользователям без ограничений. В этих файлах пишется имя пользователя без начальных и последних пробелов, другие записи начинающиеся со спецсимволов игнорируются и могут быть использованы для комментирования.
 
Первый формат команды применяется для создания нового crontab-файла из заданного файла или стандартного ввода, если это псевдо-файл, то перед ним ставится '-'
 

Доступны следующие параметры:

-u определяет имя пользователя чей файл crontab будет изменен. Если параметр не указан, то изменяется файл текущего пользователя. Замечание: если вы работаете под командой su вы можете запутать утилиту, в этом случае необходимо всегда использовать данный параметр.
-l отобразить в стандартный вывод текущее состояние crontab файла.
-r Удалить текущий файл crontab.
-e Редактировать текущий файл crontab с помощью указанного визуального редактора или редактора переменных окружения. Указанный редактор должен редактировать файл непосредственно по месту его нахождения. Любые редакторы, которые делают копию файла и потом сохраняют его не могут быть использованы. После выхода из редактора автоматически происходит перезагрузка данного файла в память.

Файлы используемые утилитой

/usr/lib/cron/cron.allow
       /usr/lib/cron/cron.deny

Описание формата файла crontab

 
Данный файл содержит инструкции для утилиты cron в формате:
"run this command at this time on this date'' (запустить данную команду в это время в указанную дату). Каждый пользователь имеет собственную таблицу и все команды будут выполняться от имени пользователя-владельца данного файла. UUCP и News обычно имеют собственные crontabs.
Игнорируются пустые строки, начинающиеся с пробела или табуляции. Строки начинающиеся с решетки "#" являются комментариями и также игнорируются.
 
Активные строки могут быть командами среды или командами cron. Установка переменных окружения имеет вид
имя = значение
Пробелы рядом со знаком равенства (=) не являются обязательными и пробел перед значением будет воспринят как часть значения и присвоен переменной "имя". Для сохранения внутренних, начальных и завершаемых значений имя переменной и присваемое значение могут быть заключены в кавычки, одинарные или двойные.
Некоторые переменные автоматически устанавливаются утилитой cron. Переменная SHELL = /bin/sh, LONGNAME и HOME равны содержимому /etc/passwd для пользователя. HOME и SHELL могут быть переопределены, LONGNAME  нет.
Замечание: переменная LONGNAME в BSD системах это имя пользователя, в других может быть использована USER.
 
Также утилита cron использует переменную MAILTO если требуется отправить электронное письмо о результатах выполнения команды. Если MAILTO определена и не пустая, то письмо будет отправлено указанному пользователю, если же переменная определена, но пустая (MAILTO="")то никакие письма отправляться не будут, кроме пользователя-владельца crontab. 
 
Формат команды для cron очень похож на стандарт V7. Каждая строка имеет пять полей описывающих дату и время затем идет имя пользователя (с необязательными ":group" и "/<login-class>") и затем следует команда. Cron выполняет команду когда совпадают полностью дата и время, когда совпадают заданные день недели или день в месяце. Проверку файла утилита делает каждую минуту. Поля дата-время могут принимать следующие значения:
 
Поле доступные значения
минуты 0-59
часы 0-23
день месяца 1-31
месяц 1-12 (или имя)
день недели 0-7 (7- воскресенье или имя)

Поля могут иметь значение звездочка (*) который означает "первый-последний". Также возможно использование диапазона чисел разделенного дефисом, например в поле часы 9-12 означает, что команда должна быть выполнена в 9,10,10,11 и 12 часов. Разрешены и списки разделенные запятой или могут комбинироваться с диапазонами, например "1,2,5,8","11-13","17-21".

Возможно использование шага значения, он указывается после слэша, например указание по отношению к часам "0-23/2" будет означать выполнение команды с интервалом в два часа в описании списком это будет выглядеть вот так "0,2,4,6,8,10,12,14,16,18,20,22", но в данном случае можно было бы использовать и выражение "*/2".

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

Оставшаяся часть строки (шестое поле) описывает команду, которая должна быть запущена. Она будет выполнена с помощью команды /bin/sh или той которая указана в переменной SHELL в файле crontab. Знак процента %, если он не используется вместе с обратным слэшем преобразуется в перевод строки и все данные после первого процента % будут введены как из стандартного ввода. Также возможно использование параметра `@AppleNotOnBattery' который запрещает выполнение команды если компьютер питается от батареи.

Замечание день выполнения команды задаются двумя путями - день недели и день месяца, если оба поля ограничены, то есть не равны '*', то команда будет выполняться в обоих случаях. Например "0 4 1,15 ; 5" - говорит, что необходимо выполнять команду в 4:30 первого и 15 числа каждого месяца и по пятницам.

Вместо пяти первых полей (времени можно указать следующее)

строка расшифровка
@reboot однократно, после перезагрузки
@yarly Один раз в год "0 0 1 1 *"
@annually аналогично @yarly
@monthly Раз в месяц "0 0 1 * *"
@weekly Раз в неделю "0 0 * * 0"
@daily Ежедневно "0 0 * * *"
@midnight Аналогично @daily
@hourly Каждый час @0 * * * *"

Пример cron файла:

   # use /bin/sh to run commands, overriding the default set by cron
     SHELL=/bin/sh
     # mail any output to `paul', no matter whose crontab this is
     MAILTO=paul
     #
     # запускать в 5 минут первого каждый день
     5 0 * * *       $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
     # запускать в 14:15 первого числа каждого месяца -- отправлять письмо пользователю  paul
     15 14 1 * *     $HOME/bin/monthly
     # запускать в 22:00 по рабочим дням 
     0 22 * * 1-5    mail -s "It's 10pm" joe%Joe,%%Where are your kids?%
     23 0-23/2 * * * echo "run 23 minutes after midn, 2am, 4am ..., everyday"
     5 4 * * sun     echo "run at 5 after 4 every sunday"

Совместимость

BSD и ATT системы могут на воспринимать названия дней недели в символьном обозначении, соединения списков и диапазонов, также будут отвергнуты, например "1-3,7,9" нельзя использовать, необходимо "1,2,3,7,9" или только "1-3" или "7,9". Нельзя использовать шаг значения.

Смежные команды

su - заменить идентификатор пользователя.
cron - утилита выполнения команд по графику.
launchctl -утилита управления для launchd.
launchd -  менеджер запуска программ.
open   - открыть файл, папку или страницу по URL.
О каталогах и механизмах, которые могут быть использованы для автозапуска в OS X.