Введение
Cron - это системный демон, который используется для запуска
периодических задач в фоновом режиме.
Файл crontab - простой текстовый файл со списком команд, которые должны
быть выполнены в указанное время.
Каждый пользователь в системе имеет свой crontab файл, включая root. Все
пользовательские файлы проверяются cron'ом вне зависимости от того,
залогинен пользователь в системе или нет.
Для вывода справки по crontab введите:
Использование Cron
Для настройки cron для вашего пользователя введите:
Отредактируйте файл и сохраните его для применения изменений запуска
фоновых задач. Не забываенем/датой не могут содержать пробелы и содержат
в себе минуты (0-59), часы (0-23, 0 - полночь), дни (1-31), месяцы
(1-12), дни недели (0-6, 0 - воскресенье).
01 04 1 1 1 /usr/bin/somedirectory/somecommand
В примере выше будет выполнена команда
/usr/bin/somedirectory/somecommand в 4 часа 1 минуту 1 января плюс
каждый понедельник в январе.
Разделенные запятыми значения можно использовать для указания нескольких
значений. Так же можно использовать дефис "-" в значениях для указания
периодов.
01,31 04,05 1-15 1,6 * /usr/bin/somedirectory/somecommand
В этом случае команда будет выполнена в 01 и 31 минуты 4 и 5 часов утра
с 1 по 15 января и июня.
Рекомендуется указывать полный путь к команде для запуска, как указано в
примерах выше.
Иногда есть необходимость запускать команды через определенные
промежутки времени. Следующий пример будет запускать команду раз в 10
минут (0, 10, 20, 30, 40 и 50 минут каждого часа):
*/10 * * * * /usr/bin/somedirectory/somecommand
Эта запись абсолютно эквивалентна:
0,10,20,30,40,50 * * * * /usr/bin/somedirectory/somecommand
Так же crontab поддерживает некоторые специальные строки, которые могут
быть использованы вместо указания времени/даты:
строка |
что имеется ввиду |
@reboot |
Единожды, при загрузке |
@yearly |
Один раз в год, "0 0 1 1 *" |
@annually |
Так же, как и @yearly |
@monthly |
Один раз в месяц, "0 0 1 * *" |
@weekly |
Один раз в неделю, "0 0 * * 0" |
@daily |
Один раз в день, "0 0 * * *" |
@midnight |
Так же, как и @daily |
@hourly |
Один раз в час, "0 * * * *" |
@reboot /path/to/execuable1
Пример выше запустит команду при старте системы.
Опции crontab
- -l - выведет список заданий
- -r - удалит все задания из crontab
- -e - редактировать crontab с помощью редактора, указанного в
переменной окружения EDITOR
После сохранения и выхода crontab проверит корректность файла и, если
ошибок не будет обнаружено, применит изменения.
Два других способа конфигурации crontab
До этого мы говорили о пользовательских crontab файлах. В системе есть
еще два способа конфигурации crontab.
ВременнЫе каталоги /etc/cron.{hourly,daily,weekly,monthly} используются
для запуска скриптов. В них можно создать скрипты, которые будут
выполнены один раз в час, день, неделю или месяц соответственно.
Так же есть общесистемный файл /etc/crontab, который имеет немного
другой синтаксис:
00 01 * * * rusty /home/rusty/rusty-list-files.sh
В данном примере после времени/даты идет имя пользователя, с правами
которого будет выполнен скрипт /home/rusty/rusty-list-files.sh
Такой же синтаксис может быть использован в crontab файлах в каталоге
/etc/cron.d. В отличие от временнЫх каталогов, в это каталог
складываются не скрипты для запуска, а crontab файлы с синтаксисом,
показанным выше.
Переменные окружения
В crontab файле можно указывать переменные окружения. Это делают в самом
начале файла:
SHELL=/bin/bash
PATH=~/bin:$PATH
Иногда надо чтоб результат работы скрипта cron отправлял на почту.
Обычно он отправляет письмо тому пользователю, чей crontab файл
используется. Адрес доставки письма можно переопределить с помощью
переменной MAILTO: