Довольно часто я вижу, как люди ищут “cron” в контексте Laravel. Фреймворк имеет механизм поверх Linux crontab, чтобы заставить его работать. Позвольте мне показать вам, как это работает.
На самом деле все это описано в официальной документации здесь, но эта страница довольно длинная, и я хочу сократить ее до основных вещей, которые вам нужно знать. Тем не менее вы можете захотеть прочитать полную версию документации позже.
Основы: Задания Cron
Как люди раньше запускали периодические автоматические задания? С помощью так называемых cron-заданий, установленных на сервере. Чтобы настроить задание на выполнение, например, каждый час, нужно отредактировать текстовый файл crontab и добавить строку:
0 * * * * sh /path/to/script.sh
Эти звездочки означают разные периоды:
минутычасыдни месяцамесяцыдни недели
Итак, в приведенном выше случае сервер должен выполнять script.sh во все часы в 0 минут, что будет 9:00, 10:00, 11:00 и т.д. Один раз каждый час.
Таким образом, вы добавляете больше заданий, подобных этому, с разным синтаксисом для разных периодов.
На самом деле, вы можете использовать файл crontab и для выполнения команд Laravel artisan. Например:
0 9 * * * sh /path/to/your/project/php artisan some:command
Это позволит выполнять php artisan some:command каждый день в 9:00.
Но ведь неудобно подключаться к серверу и настраивать все это вручную на всех серверах, верно? Вот тут-то и приходит на помощь функция Laravel Task Scheduler.
Планировщик задач Laravel
Laravel позволяет перечислить все ваши команды в определенном файле app/Console/Kernel.php, и вам нужно добавить только одну команду cron на ваш сервер:
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
Это означает, что каждую минуту будет выполняться 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, запускаемое каждую минуту, будет их выполнять.
Существует множество различных удобных для человека вариантов синтаксиса для ”когда выполнять”. Вот несколько примеров:
->everyTwoMinutes()
->hourly()
->dailyAt('13:00')
->weeklyOn(1, '8:00')
И т.д.
Вы можете проверить их все в этом разделе документации.
Кроме того, в этом случае можно выполнить различные команды:
Artisan команды: $schedule->command(‘emails:send Taylor —force’)
Jobs: $schedule->job(new Heartbeat)
Shell commands: $schedule->exec(‘node /home/forge/script.js’)
И это основы, которые вам необходимо знать и понимать Планирование задач в Laravel. Для получения подробной информации и других возможностей читайте официальную документацию.