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

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

Метод 1: использование планировщика задач с командами Artisan

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

Шаг 1. Отредактируйте файл crontab:

crontab -e

Шаг 2. Добавьте в файл crontab следующую запись:

* * * * * php /path/to/your/laravel/application/artisan schedule:run >> /dev/null 2>&1

Шаг 3. Сохраните и закройте файл crontab.

Шаг 4. Определите расписание для очередей Laravel в файле app/Console/Kernel.php:

use Illuminate\Console\Scheduling\Schedule;
protected function schedule(Schedule $schedule)
{
    $schedule->command('queue:work --tries=3')->everyMinute()->withoutOverlapping();
}

Метод 2: использование поставщиков услуг Cron

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

Шаг 1. Установите пакет «spatie/laravel-cronless-schedule»:

composer require spatie/laravel-cronless-schedule

Шаг 2. Опубликуйте файл конфигурации:

php artisan vendor:publish --provider="Spatie\CronlessSchedule\CronlessScheduleServiceProvider" --tag="config"

Шаг 3. Определите расписание для очередей Laravel в файле config/cronless-schedule.php:

use Spatie\CronlessSchedule\CronlessSchedule;
CronlessSchedule::call(function () {
    Artisan::call('queue:work --tries=3');
})->everyMinute();

Метод 3: использование внешних служб заданий Cron

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

Шаг 1. Зарегистрируйтесь во внешней службе заданий cron (например, EasyCron, CronAlarm или Cron-job.org).

Шаг 2. Настройте внешнюю службу заданий cron для отправки HTTP-запроса по определенному маршруту в вашем приложении Laravel, который запускает обработчик очереди.

Шаг 3. Определите маршрут и логику для работы с обработчиком очереди в вашем приложении Laravel:

Route::post('/cron/queue-worker', function () {
    Artisan::call('queue:work --tries=3');
});

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