Заметки сисадмина о интересных вещах из мира IT, инструкции и рецензии. Настраиваем Компьютеры/Сервера/1С/SIP-телефонию в Москве

Настройка CRON

2007-03-08 · Posted in FreeBSD

ОПИСАНИЕ

Команда crontab обеспечивает для пользователя доступ к услугам демона cron путем копирования, создания, распечатки и удаления crontab-файлов (т.е. файлов, содержащих задания для демона cron). При вызове без ключей crontab копирует указанный в командной строке файл (или стандартный ввод, если файл не указан) в специальный каталог /var/spool/cron/crontabs, где хранятся задания всех пользователей для демона cron. После этого crontab посылает сигнал демону, чтобы он принял новые задания к исполнению. Пользователь не имеет и не должен иметь непосредственного доступа к crontab-файлам в /var/spool/cron/crontabs; его интерфейс к этим файлам – команда crontab.

Пользователю разрешено выполнять команду crontab (т.е. пользоваться услугами демона cron) только при условии, что его имя встречается в файле /etc/cron.d/cron.allow. Если этого файла не существует, то проверяется файл /etc/cron.d/cron.deny для того чтобы узнать, не запрещен ли пользователю доступ к crontab. Если оба файла отсутствуют, то только суперпользователю разрешено пользоваться демоном cron. Если cron.allow не существует, cron.deny существует, но не содержит имен, то использовать команду crontab разрешено всем.

Файлы cron.allow и cron.deny содержат имена пользователей, по одному имени в строке.

Crontab-файл состоит из строк, каждая из которых содержит 6 полей. Эти поля разделены пробелами или символами табуляции. Первые 5 полей представляют собой шаблоны, указывающие время выполнения команды, шаблоны специфицируют следующие целые числа в указанном порядке:

   минуты (0-59),

   часы (0-23),

   день месяца (1-31),

   месяц в году (1-12),

   день недели (0-6 где 0=воскресенье).

Каждый из этих шаблонов может быть или символом *, который обозначает все корректные значения, или списком, элементы которого разделены запятыми. Каждый элемент должен быть либо числом, либо двумя числами, разделенными символом – (таким способом задается интервал). Заметим, что день может быть указан двумя полями (день месяца и день недели). Если в обоих этих полях указаны списки, то считаются заданными те дни, которые заданы или как день месяца, или как день недели. Например, если первые 5 полей содержат

0 0 1,15 * 1

то действие производится 1 и 15 числа каждого месяца и, кроме того, каждый понедельник. Чтобы указывать день каким-либо одним способом, в другом поле необходимо указать * (к примеру,

0 0 * * 1

приводит к выполнению действия только по понедельникам).

Остальная часть строки в файле регулярных действий представляет собой командную строку, которая выполняется командным интерпретатором (shell) в указанное время. Символы процента в этой цепочке (кроме экранированных символом "\") преобразуются в символы перевода строки. При наличии неэкранированного символа (символов) % командной строкой считается часть строки до первого % исключительно. Остальное будет обработано при выполнении команды как стандартный ввод.

Строка, начинающаяся с символа #, является комментарием. Файл не должен содержать пустых строк.

Shell запускается демоном cron из домашнего каталога пользователя, запланировавшего действие, при этом нулевой аргумент командной строки (argc[0], $0) равен "sh". Если пользователь хочет, чтобы выполнялся его профайл, он должен явно указать это в crontab-файле. Cron поддерживает стандартное окружение для каждого запускаемого shell'а, определяя переменные HOME, LOGNAME, TZ также, как они определяются при работе пользователя, а также переменные

SHELL=/bin/sh
PATH=/usr/bin

PATH=/usr/bin:/usr/sbin (для суперпользователя)

Значение пременной PATH, устанавливаемой демоном cron, можно явно указать в /etc/default/cron.

Если стандартный вывод и стандартная ошибка не перенаправлены или не подавлены пользователем, то весь вывод и сообщения об ошибках от команд, запускаемых демоном cron пересылается пользователю по почте.

ОПЦИИ (КЛЮЧИ)

-e

редактирует копию существующего crontab-файла данного пользователя или создает новый файл для редактирования, если crontab-файл данного пользователя не существует. После выхода из текстового редактора созданный/отредактированный файл устанавливается как crontab-файл пользователя вместо старого файла. Если указано имя пользователя, редактируется crontab-файл этого пользователя (доступно только суперпользователю). Переменная окружения EDITOR определяет, какой текстовый редактор вызывается при указании опции -e. По умолчанию вызывается ed. -l

распечатывает в стандартный вывод содержимое crontab-файла данного пользователя. -r

удаляет crontab-файл пользователя из каталога, в котором хранятся задания для cron.

Только суперпользователь может указывать дополнительно к ключам -r или -l имя пользователя для того, чтобы удалять или просматривать crontab-файлы указанного пользователя.

ПРИМЕРЫ

1. Очищать домашний каталог от файлов core каждый рабочий день в 3:15 утра:

15 3 * * 1-5 find $HOME -name core 2>/dev/null |  xargs   rm -f

2. Отправлять по почте поздравление ежегодно в полдень 14-го февраля:

0 12 14 2 * mailx john%Happy Birthday!%Time for lunch.

3. Ниже приведенный пример, использующий два типа указания дня (день месяца и день недели):

0 0 1,15 * 1

будет запускать команду в полночь на первое и 15-е число каждого месяца, а также в полночь на каждый понедельник. Чтобы указывать дни только одним способом, в поле, отвечающем за второй способ, должен стоять символ *, например:

0 0 * * 1

будет запускать команду только по понедельникам.

ФАЙЛЫ

/usr/spool/cron/crontabs

Каталог, в котором размещены crontab-файлы пользователей (пользователи НЕ работают непосредственно с файлами этого каталога) /var/cron/log

log-файл выполнения демоном cron заданий всех пользователей (доступен для чтения только суперпольззователю) /etc/cron.d/cron.allow

Список пользователей, которым разрешено выполнять команду crontab /etc/cron.d/cron.deny

Список пользователей, которым запрещено выполнять команду crontab. /etc/default/cron

Установки для cron: CRONLOG=YES – включить регистрацию действий cron в /var/cron/log PATH=… – установить переменную PATH для выполнения заданий пользователей

ПРЕДОСТЕРЕЖЕНИЯ

Если Вы нечаянно ввели команду crontab без аргументов, то не пытайтесь выйти, нажав CTRL+D, так как это опустошит Ваш crontab-файл. Вместо CTRL+D используйте клавишу прерывания (CTRL-C).

Если суперпользователь изменяет crontab-файл другого пользователя, результат может получится непредсказуемым, если суперпользователь не выполнил предварительно команду su для перехода в сеанс нужного пользователя.

Leave a Reply