7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. Laravel

Планирование заданий в Laravel

Scroll to top
Read Time: 7 mins

Russian (Pусский) translation by Ilya Nikov (you can also view the original English article)

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

Фреймворк Laravel позволяет настраивать запланированные задачи, чтобы вам не приходилось беспокоиться о настройке их на системном уровне. Вы можете избавиться от этого сложного синтаксиса cron при настройке запланированных задач, поскольку Laravel позвляет вам определять их с более приятным интерфейсом.

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

Традиционная настройка запланированной задачи

В повседневной разработке приложений вы часто сталкиваетесь с ситуацией, требующей периодического выполнения определенных сценариев или команд. Если вы работаете с системой * nix, вы, вероятно, знаете, что задания cron обрабатывают эти команды. С другой стороны, они известны как запланированные задачи в системах на базе Windows.

Давайте быстро рассмотрим простой пример работы cron на основе nix.

Довольно просто - задача запускает файл statistics.sh каждые пять минут!

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

Рассмотрим некоторые задачи, которые сложное веб-приложение должно выполнять периодически в фоновом режиме.

  • Очистка ненужных данных из базы данных.
  • Обновление индексов кэширования.
  • Подсчет статистики сайта.
  • Отправка писем.
  • Резервное копирование различных элементов сайта.
  • Создание отчетов.
  • И другое.

Итак, как вы можете видеть, есть много вещей, ожидающих периодического запуска, а также с разными временными интервалами. Если вы опытный системный администратор, вы можете определить работу cron для всех этих задач, но иногда мы, как разработчики, хотим, чтобы было проще.

К счастью, Laravel поставляется со встроенным API планирования задач, который позволяет вам определять запланированные задачи, как никогда раньше. И да, в следующем разделе речь пойдет об этом - об основах планирования задач Laravel.

Laravel Way

В предыдущем разделе мы рассмотрели традиционный способ создания рабочих заданий cron. В этом разделе мы рассмотрим особенности Laravel в контексте API планирования задач.

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

Фактически, первое, что вам нужно сделать, если вы хотите использовать систему планирования Laravel, - это настроить задание cron, которое выполняется каждую минуту, и вызывает команду artisan, показанную в следующем фрагменте.

Вышеупомянутая команда artisan вызывает планировщик Laravel и, в свою очередь, выполняет все ожидающие задания cron, определенные в вашем приложении.

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

Это метод schedule класса App\Console\Kernel, который необходимо использовать, если вы хотите определить запланированные задачи для конкретных приложений.

Перейдите и захватите содержимое файла app/Console/Kernel.php.

Как вы можете видеть, основной код сам по себе является полезным примером. В приведенном выше примере Laravel почасово запускает команду inspire. Вам не кажется, что синтаксис максимально интуитивен?

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

  • Использовать колбэки/замыкания.
  • Вызов команды artisan.
  • Выполнение команды оболочки.

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

  • каждую минуту / каждые пять минут
  • hourly/daily/weekly/quarterly/yearly
  • в определенное время суток
  • и многое другое

Фактически, я бы сказал, что он предоставляет полный набор подпрограмм, так что вам никогда не понадобиться прикасаться к оболочке, чтобы создавать свои рабочие задания cron!

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

Создайте свою первую запланированную задачу в Laravel

Как мы обсуждали, существуют разные способы, с помощью которых Laravel позволяет вам определять запланированные задачи. Давайте рассмотрим все, чтобы понять, как это работает.

Метод колбэка / замыкания

API-интерфейс планирования предоставляет метод call, который позволяет выполнять функцию или замыкание. Давайте переработаем файл app/Console/Kernel.php со следующим кодом.

Как вы можете видеть, мы передали функцию замыкания в качестве первого аргумента метода call. Кроме того, мы установили частоту каждые 30 минут, поэтому она будет выполнять функцию замыкания каждые 30 минут!

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

Команда artisan

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

Перейдите и проверьте содержимое файла app/Console/Kernel.php следующим образом.

Метод command, который вы хотели бы использовать, если вы хотите запланировать команду artisan, как показано в приведенном выше фрагменте кода. Вам нужно передать сигнатуру команды artisan в качестве первого аргумента метода command.

Конечно, вам нужно определить соответствующую команду artisan, а также в app/Console/Commands/UserStatistics.php.

Команда Exec

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

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

Из кода видно, что вам нужно использовать метод exec планировщика, и вам нужно передать команду, которую вы хотите запустить в качестве первого аргумента.

Кроме того, мы также использовали метод sendOutputTo, который позволяет вам собирать выходные данные команды. С другой стороны, есть метод emailOutputTo, который позволяет отправлять выходные данные!

И это подводит нас к концу статьи. Фактически, мы только что поверхностно прошлись по Laravel Scheduling API.

Заключение

Сегодня мы рассмотрели API планирования задач в веб-фреймворке Laravel. Было увлекательно видеть, как легко это позволяет вам управлять задачами, которые необходимо запускать периодически.

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

Я надеюсь, что вам понравилась статья, и вы должны чувствовать себя более уверенно в настройке запланированных задач в Laravel. Для тех из вас, кто только начинает работать с Laravel или хочет расширить свои знания, сайт или приложение с расширениями, у нас есть множество уроков, которые вы можете изучать на Envato Market.

Если у вас есть какие-либо вопросы, пишите их ниже в комментариях.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.