Техническая поддержка

Планировщик задач (cron)

Сron - это планировщик в UNIX-системах, который позволяет запускать скрипты или программы в заданное время или через заданный интервал.

Просмотр и изменение конфигурации cron на виртуальном хостинге "Зенон НСП" можно делать как в консоли, так и в  панели управления услугами.

Панель управления

Чтобы получить доступ к cron из панели управления, необходимо авторизоваться на https://stat.zenon.net. Затем необходимо в меню "Хостинг", выбрать сайт, для которого нужно настроить cron, и в блоке "Управление контентом" нажать на иконку "Cron":

Далее откроется таблица, где можно сконфигурировать cron нужным Вам образом. Например, для того чтобы скрипт test.php, расположенный в папке сайта host.ru, запускался через каждый час, необходимо внести данные, приведенные ниже на изображении. После изменения любой информации нужно нажать кнопку "Сохранить":

Если необходимо получать отчет о работе скрипта на e-mail, нужно в секции "Управление отчетами" указать Ваш e-mail, отметить галочкой этот пункт и нажать кнопку "Сохранить".

Рекомендации по настройке 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 имеют формат:

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

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

параметр допустимый интервал
минуты 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 или команда во время выполнения ничего не выводила, результаты работы по e-mail не посылаются. Установить значение переменной окружения можно при конфигурировании cron.

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

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

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

# примеры расписаний выполнения команд
# весь вывод отсылать по 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>&