Все crontab-файлы в системе имеют общий формат. Комментарии начинаются со знака решетки (#) в первой позиции строки. Каждая строка, не являющаяся комментарием, содержит шесть полей и представляет одну команду:
минуты часы день месяц день_недели команда
Первые пять полей отделяются друг от друга пробелами, но в поле команда пробел выполняет свою обычную роль разделителя аргументов.
В полях минуты, часы, день, месяц и день_недели дается информация о времени запуска команды. Описание этих полей приведено в табл. 9.1.
Таблица 9.1. Спецификации времени в crontab-файле
|
Поле
|
Описание
|
Диапазон
|
|
минуты
|
Минуты часа
|
от 0 до 59
|
|
часы
|
Часы дня
|
от 0 до 23
|
|
день
|
День месяца
|
от 1 до 31
|
|
месяц
|
Месяц года
|
от 1 до 12
|
|
день_недели
|
День недели
|
от 0 до 6 (0 - воскресенье)
|
Каждое из вышеуказанных полей может содержать:
- звездочку, которая означает любую цифру;
- целое число, задающее отдельный элемент даты;
- два разделенных дефисом целых числа, соответствующих диапазону значений.
- целые числа или диапазоны, разделенные запятыми и соответствующие любому из указанных значений.
Например, спецификация
45 10 * * 1-5
означает "10 часов 45 минут, с понедельника по пятницу".
С полями день_недели и день сопряжена потенциальная двусмысленность, которую необходимо учитывать. Каждый день является и днем недели, и числом месяца. Если указаны оба этих поля, то подпадающему под их действие дню достаточно удовлетворять одному из двух требований, чтобы пройти отбор. Например, спецификация
0,30 * 13 * 5
означает "каждые полчаса по пятницам и каждые полчаса тринадцатого числа месяца", но не "каждые полчаса в пятницу тринадцатого числа".
Поле команда содержит командную строку, подлежащую выполнению интерпретатором sh. Это может быть любая допустимая команда интерпретатора, причем без кавычек. Считается, что поле команда продолжается до конца строки и может содержать пробелы и символы табуляции. Принадлежащий суперпользователю crontab-файл может включать команды, выполняемые от имени произвольного пользователя. Они предваряются строкой /bin/su имя пользователя -с.
Большинство версий демона cron допускают использование знака процента (%) вместо символа новой строки в поле команда. В реальную команду включается только текст до первого знака процента; остальные строки передаются команде в качестве стандартного входного потока.
Вот некоторые примеры допустимых команд в crontab-файле:
echo The time is now "date' > /dev/console
write garth % Hi Garth. % Remember to get a job.
cd /ets; /bin/mail -s "Passwords file" evi < passwd
А вот полные примеры записи:
30 2 * * 1 (cd /users/joe/project; make)
Эта строка будет активизироваться в 2:30 по понедельникам. Она инициирует выполнение команды make в каталоге /users/joe/project. Ее можно использовать для запуска продолжительной компиляции на время, пока в системе не работают другие пользователи. Вся выходная информация команды cron обычно посылается по электронной почте "владельцу" команды .
20 1 * * * find /tmp -atime +3 -exec rm -f () ';'
Данная команда будет выполняться каждый день в 1:20. Она удаляет из каталога /tmp все файлы, к которым за последние 72 часа пользователи ни, разу не обратились.
55 23 * * 0-3,6 /staff/trent/bin/acct-script
А эта строка запускает команду acct -script в 23:55 каждый день, кроме четверга и пятницы.