Laravel: Как работает cron и планировщик задач

Источник: «How cron and Task Scheduler work in Laravel»
Довольно часто я вижу людей, которые ищут cron в контексте Laravel. У фреймворка есть механизм работающий поверх `crontab` в Linux, позвольте показать вам, как это работает.

На самом деле всё описано в официальной документации Laravel, но там довольно длинная страница, и я хочу сократить её до основных вещей, которые нужно знать. Тем не менее вы можете прочитать полную документацию попозже.

Основы: Задачи Cron

Итак, как раньше люди выполняли периодические автоматизированные задания? С так называемыми заданиям cron, настроенными на сервере. Например, чтобы настроить выполнение задания каждый час, вы должны отредактировать текстовый файл crontab и добавить строку:

0 * * * * sh /path/to/script.sh

Эти звёздочки означают разные периоды:

Итак, в приведённом выше примере сервер должен выполнять script.sh во все часы в 0 минут, то есть в 9:00, 10:00, 11:00 и т.д. Один раз в час

Таким образом, вы добавляете больше заданий с разным синтаксисом для разных периодов.

Фактически, вы также можете использовать файл crontab для выполнения Laravel команд artisan. Примерно так:

0 9 * * * sh /путь/к/вашему/проекту/php artisan some:command

Это задание cron будет выполнять команду php artisan some:command каждый день в 9:00.

Но не удобно подключаться к серверу и настраивать всё это вручную на всех серверах, да? Вот где в игру вступает функция Laravel Task Scheduler.

Laravel Task Scheduler

Laravel позволяет вам перечислить все ваши команды в конкретном файле app/Console/Kernel.php, и вам нужно добавить только одну команду cron на свой сервер:

* * * * * cd /путь-к-вашему-проекту && php artisan schedule:run >> /dev/null 2>&1

Это задание cron означает, что каждую минуту будет выполняться php artisan schedule:run и проверять, есть ли какие-либо команды для запуска.

Вот основной метод app/Console/Kernel.php по умолчанию:

class Kernel extends ConsoleKernel
{
protected function schedule(Schedule $schedule)
{
// $schedule->command('inspire')->hourly();
}

// ...
}

Итак, это пример синтаксиса для размещения команд в расписании:

$schedule->[command]()->[when_to_execute]();

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

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

Вы можете посмотреть все возможные команды в документации Laravel.

Кроме того, здесь можно запускать различные команды:

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

Дополнительные материалы

Предыдущая Статья

Laravel: Логирование в приложении

Следующая Статья

Laravel: Сервис Контейнер — что нужно знать новичкам