crontab [файл] crontab [-elr] [пользователь]
Команда 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 для перехода в сеанс нужного пользователя.