Developer Tales or everything about everything

31Янв/131

Планировщик задач crontab в Linux

Если у Вас есть высоконагруженный сайт, на котором выполняются ресурсоемкие операции, то, возможно, Вы захотите запускать такие задачи в фоновом режиме (например, генерация миниатюр изображений или обработка больших массивов данных). Запуск таких операций при обращении пользователя к странице сайта - не самая лучшая идея, т.к. это очень сильно затормозит генерацию страницы. Решение проблемы для операционных систем Linux - cron. Cron позволяет автоматически запускать определенные задачи в фоновом режиме через определенные промежутки времени. Cron может быть использован для самых различных целей: бэкап файлов и файловой системы, синхронизация файлов, установка обновлений. Планировщик является самым лучшим инструментом для запуска ресурсоемких задач.

Crontab

Команда crontab (chronos - время (греч.), и tab - таблица), которую можно найти в Unix-подобных системах, используется для планирования запуска задач. В рамках темы используется термин cronjob - это запланированное задание crontab.

Чтобы увидеть, какие задачи запланированы на выполнение, можно выполнить следующую команду:

Чтобы изменить список заданий:

Эта команда откроет список заданий cron в текстовом редакторе, который определен в системе по умолчанию.

Задания в crontab записываются в следующем виде:

Формат crontab

Как видно, из предыдущего примера, позиция задания в crontab состоит из пяти звездочек и команды запуска. Общий вид задания можно представить в следующим образом:

Здесь:

  1. M - запуск при наступлении минуты M;
  2. H - запуск при наступлении часа H;
  3. D - запуск при наступлении дня месяца D;
  4. N - запуск при наступлении месяца N;
  5. W - запуск при наступлении дня недели W;
  6. Cmd - команда, которую необходимо запустить. Здесь может быть указана любая команда, которую можно выполнить в консоли Linux.

Специальный символ '*' формально означает слово "Каждый". Например, если на месте M стоит '*', то это означает, что запуск будет происходить каждую минуту, если на месте H - то каждый час.

Вот так будет выглядеть запуск скрипта в час дня каждую пятницу:

  • 0 - запускать при наступлении нулевой минуты;
  • 1 -  запускать при наступлении часа 1;
  • * - каждый день;
  • * -  каждый месяц;
  • 5 -  каждую пятницу.

Если нужно осуществлять запуск в некотором периоде времени, то не нужно на каждый день писать отедельную задачу, следует использовать специальный символ '-', который в сочетании с началом и концом периода определяет период, в котором будет запускаться задача.

Например, вот так можно запускать скрипт в рабочие дни в час дня:

Здесь 1-5 означает "Каждый понедельник, вторник, среду, четверг и пятницу".

Также, можно перчислять время запуска с помощью запятой:

Удобно? Не всегда. Что, если необходимо запускать скрипт каждые две минуты? Вписывать 30 чисел не совсем рационально. Crontab решает и эту проблему. С помощью обратного слэша можно запланировать запуск через определенные промежутки времени.

Например, запуск каждый две минуы в час дня каждую пятницу:

Специальные слова

Также, для удобства, в crontab зарезервированы специальные слова:

  • @reboot - запуск после рестарта системы;
  • @yearly - запуск раз в год (в 00:00 первого дня первого месяца);
  • @annualy - синоним @yearly;
  • @monthly - запуск раз в месяц (в 00:00 первого дня месяца);
  • @weekly - запуск раз в неделю (в 00:00 первого дня недели);
  • @daily - запуск раз в день (в 00:00);
  • @midnight - запуск в полночь;
  • @hourly - запуска каждый час (в 00:00).

Используется очень просто:

Логирование

Наверняка хочется не просто выполнять некоторые запланированные задачи, но и иметь возможно видеть результат их работы.

По умолчанию cron сохраняет результаты выполнения заданий в mailbox пользователя, под которым выполняется скрипт. Но намного лучше, когда результат выполнения скрипта записывается в отдельный лог-файл. Этого можно добиться используя оператор потокового вывода Linux:

Оператор >>  позволяет записать результаты выполнения команды в левой части выражения в файл или поток из правой части.

Выражение 2>&1 имеет отношение к потокам вывода. В Linux имеется два различных потока вывода: поток вывода данных (STDOUT) и поток вывода ошибок (STDERR). Поток вывода ошибок имеет идентификатор 2, а поток вывода данных - 1. Рассматриваемое выражение просто заставляет систему выводить ошибки в стандартный поток вывода.

Существуют также ситуации, когда результаты работы задач не нужны, в этом случае нужно отправить в /dev/null:

Также можно настроить сервер так, чтобы сообщения о выполнении задач приходили на почту. При установленной программе mailx это можно сделать так:

Оригинал статьи: kvz.io

Просмотров: 5419
Комментарии (1) Пинги (0)
  1. А как узнать время следующего запуска? Допустим я забыл когда я запланировал задачу, и хочу узнать когда она будет по крону выполнена.


Leave a comment


один × = 6

http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_bye.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_good.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_negative.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_scratch.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_wacko.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_yahoo.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_cool.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_heart.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_rose.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_smile.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_whistle3.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_yes.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_cry.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_mail.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_sad.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_unsure.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_wink.gif 
 

Trackbacks are disabled.