Выполнение заданий по расписанию

Выполнение заданий по расписанию

В больших веб приложения приложениях, а иногда и в повседневной работе, возникает необходимость в регулярном периодическом запуске приложений. В Unix-подобных операционных системах данная проблема решается при помощи демона CRON. Об этом замечательном демоне и пойдет дальше речь.

Данная заметка не претендует на роль исчерпывающего руководства. Моей целью - показать когда и как можно использовать CRON.

Что же такое CRON?

CRON - это демон-планировщик задач. Как правило он по умолчанию присутствует во всех Linux системах. Данный демон используется в основном для регулярного выполнения задач/приложений в заданное время.

Как запускать задачи?

Все задачи, запускаемые демоном CRON храняться в файлах crontab. Достаточно отредактировать ваш файл и CRON сам начнет выполнять указанные задачи. Расположение данных файлов в зависимости от операционной системы может отличаться, поэтому путь до них я указывать не буду.

Для редактирования файлов crontab совершенно не обязательно знать их местоположение. Открыть файл на редактирование можно при помощи следующей команды:

Данные команды запустят текстовый редактор заданный переменной окрудений VISUAL или EDITOR.

Кроме, того файл crontab может быть создан из любого текстового файла. Для этого нужно создать текстовый файл, например file_for_cron, и выполнить команду:

Во всех указанных командах user - имя пользователя, чей crontab-файл редактируется, path_to_file/file_for_cron - абсолютный или относительный путь до файла file_for_cron.

Иногда полезно узнать что, содержится в файле crontab, для этого можно воспользоваться командой:

Чтобы удалить crontab-файл пользователя, можно воспользоваться командой:

Какие задачи решаются с использованием CRON?

Итак с тем как редактировать задачи разобрались. Давайте разберемся какие задачи наиболее часто решаются при помощи планировщика задач.

Приведу наиболее популярные задачи. Однако не стоит думать, что ими исчпрпывается весь писок:

  • сбор и очистка лог-файлов
  • резерсное копирование файлов и баз данных
  • поиск и удаление старых и временных файлов
  • рассылка почты и смс (например при обработке очереди рассылки при большых объемах отправлений)
  • получение и обработка входящей почты
  • кеширование частоиспользуемой информации и обновление кеша
  • пересчет рейтинга пользователей и контента (иногда в реальном времени эта задача бывает трудоемкой, поэтому все обрабатывается частями)
  • запуск билда проекта, выполнение тестов и автоматический релиз при удачном выполнении тестов - при непрерывной разработке.

 

Что писать в crontab?

Теперь пришло время разобраться с тем что писать в ваш crontab-файл.

Пример типичного кронтаб файла приведен ниже:

Давайте подробнее рассмотрим его содержимое.

Первая строка, как и понятно, является комментарием.

Вторрая строка задает параметр SHELL указывает коммандный интерпретатор, которым следует обрабатывать ваши команды. В принципе ее можно удалить, если вам не важен интерпретатов, в этом случае будет использовано значение по умолчанию.

Параметр MAILTO указывает на email адрес куда будут отправляться результаты работы планировщика.

если исполняемые файлы лежат не в стандартных дирректориях, то их можно добавить в переменную PATH/

Теперь собственно синтаксис самих выполняемых комманд. Как вы можете видеть, любое задание планировщика имеет следующую структуру:

* * * * * выполняемая команда - - - - - | | | | | | | | | ----- День недели (0 - 7) (Воскресенье =0 или =7) | | | ------- Месяц (1 - 12) | | --------- День (1 - 31) | ----------- Час (0 - 23) ------------- Минута (0 - 59)

В качестве выполняемой комманды можно записать любую вашу комманду. Гораздо больший интерес составляют первые 5 параметров. Рассмотрим подробнее их задание:

Если параметр равен *, то значение данного параметра не важно (беруться все), если указано конкретное число, то соответствеющий параметр времени должен совпасть с указанным, чтобы задание бало выполнено. Например, следующая последовательность символов:

5 0 * * * - позволяет запускать указанную задачy в 0 часов 5 минут каждого дня каждого месяца каждого года

0 0 1 * * - позволяет запускать указанную задачy в 0 часов 0 минут первого числа каждого месяца каждого месяца каждого года

Думаю тут логика понятна. Однако есть еще несколько вариантов задания параметров:

*/3 0 1 * * - позволяет запускать указанную задачy каждую третью минуту (0, 3, .., 57) в 0 часов первого числа каждого месяца каждого месяца каждого года

Кроме деления значения нужного параметра можно указать через запятую:

1,5,20 0 1 * * - позволяет запускать указанную задачy в первую, пятую и двадцатую минуту в 0 часов первого числа каждого месяца каждого месяца каждого года

Или может быть указан диапазон:

0 1-6 * * * - позволяет запускать указанную задачy в 0 минут каждый час (с первого по 6) каждый день каждого месяца каждого месяца каждого года

Особенности.

ПОМНИТЕ, что после последнего задания нужно оставить хотя бы одну пустую строку, иначе последнее задание не будет выполняться! И влог-файл ничего не запишется!

Все условия обрабатываются с использованием логической операции "И". Но есть ИСКЛЮЧЕНИЕ. День недели и день месяца, указанные вместе обрабатываются с использованием логической операции "ИЛИ". Иног да этот факт оказывается неожиданным:) Это накладывает ограничения на планировщик, например нельзя реализовать следующие условия условие типа "первый понедельник каждого месяца" или "каждую пятницу в 13 число". Более того, такое поведение не считается ошибкой, А воспринимается как стандарт!

Более подробную информацию можно получить, выполнив команду man cron

Еще один пример использования CRON. Например выхотите купить сайдинг или поликарбонат  по наиболее выгодной цене.  Поликарбонат вы нашли на  этой странице http://a-bc.com.ua/. При помощи крона можно ежедневно проверять цены на этот и другие требуемые строительные материалы.И когда цена быдет вас устраивать - совершите покупку.

Нет комментариев.
Добавить комментарий
Вам необходимо включить показ изображений в браузере для того чтобы увидеть код

Дайте нам знать, что вы - живой человек. Для нас это важно!
Кликните, если плохо видно

Прежде чем высказать свое мнение, прочитайте пожалуйста: правила

Рейтинг@Mail.ru