Посты по тегу: HowTo

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='user@example.com'