Настройка CRON
Команда 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 также, как они определяются при работе пользователя, а также переменные
1 2 3 |
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
-r
распечатывает в стандартный вывод содержимое crontab-файла данного пользователя.
удаляет crontab-файл пользователя из каталога, в котором хранятся задания для cron.
Только суперпользователь может указывать дополнительно к ключам -r или -l имя пользователя для того, чтобы удалять или просматривать crontab-файлы указанного пользователя.
ПРИМЕРЫ
1. Очищать домашний каталог от файлов core каждый рабочий день в 3:15 утра:
1 |
15 3 * * 1-5 find $HOME -name core 2>/dev/null | xargs rm -f |
2. Отправлять по почте поздравление ежегодно в полдень 14-го февраля:
1 |
0 12 14 2 * mailx john%Happy Birthday!%Time for lunch. |
3. Ниже приведенный пример, использующий два типа указания дня (день месяца и день недели):
1 |
0 0 1,15 * 1 |
будет запускать команду в полночь на первое и 15-е число каждого месяца, а также в полночь на каждый понедельник. Чтобы указывать дни только одним способом, в поле, отвечающем за второй способ, должен стоять символ *, например:
1 |
0 0 * * 1 |
будет запускать команду только по понедельникам.
ФАЙЛЫ
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/crфon
Установки для cron: CRONLOG=YES – включить регистрацию действий cron в /var/cron/log PATH=… – установить переменную PATH для выполнения заданий пользователей
Если Вы нечаянно ввели команду crontab без аргументов, то не пытайтесь выйти, нажав CTRL+D, так как это опустошит Ваш crontab-файл. Вместо CTRL+D используйте клавишу прерывания (CTRL-C).
Если суперпользователь изменяет crontab-файл другого пользователя, результат может получится непредсказуемым, если суперпользователь не выполнил предварительно команду su для перехода в сеанс нужного пользователя.