Чат PHP-разработчиков
Логические задачи с собеседований
Планировщик заданий cron

Планировщик заданий cron

В прошлом уроке мы с вами начали рассматривать пример с рассылкой сообщений раз в день. Мы пришли к выводу, что реализовать это в виде клиент-серверной архитектуры нормально не получится и решили использовать для этого CLI в PHP. Однако, до сих пор непонятно, каким образом можно запускать этот скрипт по расписанию. Для этого используется планировщик заданий, называющийся cron.

cron – это такая программа в операционных системах Unix, которая позволяет очень простым способом запускать различные программы по расписанию. Для этого нужно в специальный конфигурационный файл этой программы прописать нужные настройки. В этом файле настроек действует простое правило – одна строчка в файле = одно запланированное действие. То есть если мы хотим по расписанию запускать какую-то одну программу, то нам нужно создать для нее одну строку в файле настроек. Нужна еще одна программа с другим расписанием? Не вопрос – просто добавляем еще одну строку в этот файлик.

Каждая строка состоит при этом из двух частей:

  1. Расписание, по которому нужно что-то выполнить;
  2. Команда, которую нужно выполнять.

И если команда в большинстве случаев – это просто путь к нужной программе с передачей в нее аргументов, то расписание в cron – вещь к которой нужно привыкнуть. Ведь представляет оно собой ни что иное, как 5 выражений, разделенных пробелами. Вот простейший пример файла конфигурации для cron:

Код доступен только после покупки курса ООП в PHP.

Где цифры обозначают:

Код доступен только после покупки курса ООП в PHP.

В нашем примере команда будет запускаться каждый день каждого месяца в 00:00. Звездочки – значит «каждый» час, день, и т.п. Конкретное значение – это конкретное значение, простите за тавтологию =)

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

Код доступен только после покупки курса ООП в PHP.

Если 1-го числа каждого месяца в 04:20, то:

Код доступен только после покупки курса ООП в PHP.

Операторы

Кроме вышеупомянутой звездочки есть и другие операторы.

Слэш (/)

Код доступен только после покупки курса ООП в PHP.

С помощью слэша можно задать периодичность выполнения. Команда выше будет запускаться каждые 20 минут.

Запятая (,)

Код доступен только после покупки курса ООП в PHP.

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

Тире (-)

Код доступен только после покупки курса ООП в PHP.

С помощью тире можно указать диапазон. Команда выше будет запускаться каждую минуту с 9:00 до 17:59.

Используем cron

Вообще cron – это утилита из операционной системы Linux. Она поддерживается большинством современных хостингов, и когда вы будете выкладывать свой сайт на хостинг – вы сможете её использовать. Для тех же, кто под виндой, спешу обрадовать – в OpenServer есть своя реализация cron.

Для этого нужно зайти в настройки OpenServer и перейти во вкладку «Планировщик заданий».
cron в OpenServer

Давайте добавим в планировщик следующее задание:

Код доступен только после покупки курса ООП в PHP.

Сделайте всё, как на скриншоте и нажмите «Добавить».
добавление команды в планировщик

После чего жмем «Сохранить».
команда в планировщике

Команда успешно добавлена в расписание.
Но у нас пока нет класса TestCron. Давайте его создадим.

src/MyProject/Cli/TestCron.php

Код доступен только после покупки курса ООП в PHP.

Ждём пару минут и проверяем файлик на диске C:.

C:\1.log

Код доступен только после покупки курса ООП в PHP.

Как видим, наш скрипт выполнялся с интервалом в одну минуту.

Теперь вы знаете, как использовать планировщик cron для своих целей. Он используется абсолютно для разных задач – начиная от рассылок писем с поздравлениями и заканчивая выгрузками статистики из базы данных несколько раз в день. А один мой товарищ использует cron для полива цветов раз в день – для этого он написал небольшую программку для Raspberry PI и использует крон для её запуска по расписанию. Идеи могут быть самыми разными – всё, что нужно запускать по расписанию, можно сделать с помощью этого мощного и в то же время простого инструмента.

Читайте также
Комментарии