Запуск процессов в указанное время - cronПодписка на Комментарии к "Запуск процессов в указанное время - cron"

Аватар zenon

В OC LINUX периодическим выполнением процессов управляет демон cron. Он запускается во время начальной загрузки системы и остается в активном состоянии, пока система не выключена. Демон cron читает файл конфигурации, который называется crontab-файлом, содержащий последовательность командных строк и расписание их вызова. Командные строки обрабатываются интерпретатором sh, поэтому почти все, что можно сделать из shell вручную, можно перепоручить процессу cron.

Для просмотра и изменения конфигурации процесса cron необходимо использовать команду

# crontab

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

Команда

# crontab -l

выводит текущую конфигурацию cron на стандантный вывод. Используя перенаправления ввода-вывода в shell, можно сохранить текущую конфигурацию в файл. Например, после выполнения команды
# crontab -l > mycrontab

файл mycrontab будет содержать текущую конфигурацю cron.

Для восстановления конфигурации cron из файла необходимо выполнить команду

# crontab mycrontab

где mycrontab - путь к файлу, содержащему конфигурацию. Обратите внимание на то, что файл mycrontab в этом случае должен иметь определенные права доступа - чтение и запись только для владельца. Изменить права доступа к файлу на правильные можно при помощи команды
# chmod 600 mycrontab

Чтобы полностью удалить конфигурацию cron, выполните команду:
# crontab -r

Команда

# crontab -e
автоматически запустит текстовый редактор и загрузит в него файл конфигурации cron. После выхода из редактора, новая конфигурация cron будет установлена автоматически.

Конфигурационный файл содержит последовательность командных строк и расписание их вызова. Пустые строки и строки, начинающиеся с символа '#', игнорируются. Остальные строки являются установками переменных окружения и командами cron.

Строки, устанавливающие переменные окружения, должны иметь вид 'NAME=VALUE', где NAME - имя устанавливаемой переменной, VALUE - значение. Эти переменные окружения будут установлены при выполнении команды в shell.

Строки, описывающие команды cron имеют формат:

минуты часы день_месяца месяц день_недели команда ....

Первые пять полей описывают расписание запуска команд. Начиная с шестого поля и до конца строки следует команда. Допустимые значения временных параметров:

параметр       допустимый интервал
минуты        0-59
часы          0-23
день_месяца   1-31
месяц         1-12
день_недели   0-7 (0-Вс,1-Пн,2-Вт,3-Ср,4-Чт,5-Пт,6-Сб,7-Вс)

Символ '*' обозначает любое значение. Разрешено указывать диапазон значений, например, '8-11' в поле 'часы', соответсвует 8,9,10 и 11 часам. Можно указывать список значений или диапазонов, перечисляя из через запятую, например '2,5,9-17'. Также можно указать выполнение команды через заданый интервал, используя символ '/'. Например, '12-18/2' эквивалентно '12,14,16,18'. Если указать '*/15' в поле 'минуты', команда будет выполняться каждые 15 минут.

День, в который будет выполняться команда, определяется двумя полями - 'день_месяца' и день_недели'. Команда будет выполняться в дни, соответствующие хотя бы одному из указанных критериев. Например, расписание '30 4 1,15 * *' предписывает cron выполнять команду в 04:30 в первый и пятнадцатый день месяца.

Один раз в минуту процесс cron проверяет расписание вызова и выполняет те команды, время запуска которых наступило (таким образом, минута - это минимальный интервал, с которым cron может выполнять команды). Для выполнения команды cron передает ее интерпретатору /bin/sh. Если в конфигурационном файле установлены какие-либо переменные окружения, то они будут установлены при выполнении команды. Как и в shell, в переменной HOME автоматически сохраняется полный путь к домашней директории. При указании путей рекомендуется использовать не полный путь к файлам, а эту переменную. Например, для выполнения программы daily, которая находится в поддиректории bin в домашней директории, ежедневно в 3:00, cron можно сконфигурировать так:

0 3 * * * $HOME/bin/daily

Для ежедневного запуска программ рекомендуется использовать интервал времени с 2 до 8 часов ночи, т.к. загрузка системы в этот период минимальна. Аналогично, еженедельные запуски программ рекомендуется конфигурировать на субботу или воскресенье.

Выполнение команды происходит с такими же ограничениями по объему используемой памяти и процессорного времени, как и при выполнении в shell.

Данные выводимые командой на стандартный вывод (stdout) и стандартный вывод сообщений об ошибках (stderr) отсылаются по email на адрес, установленный в переменной окружения MAILTO. Если переменная не установлена MAILTO или команда во время выполнения ничего не выводила, результаты работы по email не посылаются. Установить значение переменной окружения можно при конфигурировании cron.

  • Важно:
  • при редактировании файла задач необходимо завершать строки нажатием клавиши Enter. Только в этом случае cron будет обрабатывать задания корректно.

    Пример конфигурационного файла cron

    # результаты выполнения команд отсылать на адрес
    MAILTO=cron@domain.ru

    # примеры расписаний выполнения команд
    # весь вывод отсылать по email
    # (если установлена переменная MAILTO)

    # выполнять раз в полчаса
    # в 0 и 30 минут каждого часа
    */30 * * * * $HOME/bin/every_half_hour

    # выполнять четыре раза в час
    # в 0,15,30 и 45 минут каждого часа
    */15 * * * * $HOME/bin/every_half_hour

    # выполнять каждый час в 0 минут
    0 * * * * $HOME/bin/hourly

    # выполнять через час # в 0,2,4,6,8,10,12,14,16,18,20 и 22 часов
    0 */2 * * * $HOME/bin/every_other_hour

    # выполнять ежедневно в 4:10
    10 4 * * * $HOME/bin/daily

    # выполнять еженедельно по воскресеньям в 5:20
    20 5 * * 7 $HOME/bin/weekly

    # выполнять ежемесячно 1 числа в 6:30
    30 6 1 * * $HOME/bin/monthly

    # Примеры перенаправления вывода при выполнении команд.
    # (предполагаем, что переменная MAILTO установлена)

    # выполнять команду каждую минуту,
    # вывод дописывать в конец файла
    * * * * * $HOME/bin/command >> $HOME/command.log 2>&1

    # выполнять команду каждую минуту,
    # стандартный вывод дописывать в конец файла,
    # сообщения об ошибках отсылать по email
    * * * * * $HOME/bin/command >> $HOME/command.log

    # выполнять команду каждую минуту,
    # вывод игнорировать полностью
    * * * * * $HOME/bin/command > /dev/null 2>&1

    Добавить комментарий