Cron: How To
Введение
Cron - это системный демон, который используется для запуска периодических задач в фоновом режиме.
Файл crontab - простой текстовый файл со списком команд, которые должны быть выполнены в указанное время.
Каждый пользователь в системе имеет свой crontab файл, включая root. Все пользовательские файлы проверяются cron'ом вне зависимости от того, залогинен пользователь в системе или нет.
Для вывода справки по crontab введите:
man crontab
Использование Cron
Для настройки cron для вашего пользователя введите:
crontab -e
Отредактируйте файл и сохраните его для применения изменений запуска фоновых задач. Не забываенем/датой не могут содержать пробелы и содержат в себе минуты (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:
MAILTO='[email protected]'
Комментарии: