Запуск очередей Laravel на общем хостинге: методы и примеры

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

  1. Использование заданий Cron:

    • Настройте задание cron в своей учетной записи общего хостинга, чтобы периодически выполнять рабочую команду очереди Laravel.
    • Добавьте следующую запись в файл crontab:
      * * * * * php /path/to/your/project/artisan queue:work --daemon --once
    • В этом примере обработчик очереди запускается каждую минуту. Отрегулируйте частоту по мере необходимости.
  2. Использование Supervisor:

    • Некоторые провайдеры виртуального хостинга поддерживают систему управления процессами Supervisor.
    • Создайте файл конфигурации Supervisor, например, laravel-queue.conf
      [program:laravel_queue]
      command=php /path/to/your/project/artisan queue:work --daemon --once
      autostart=true
      autorestart=true
      user=your_username
    • Замените /path/to/your/projectфактическим путем к файлам вашего проекта Laravel.
    • Используйте подходящее имя пользователя в поле user.
    • Инструкции по настройке Supervisor см. в документации вашего хостинг-провайдера.
  3. Использование длинного опроса:

    • В среде общего хостинга у вас может не быть прямого доступа к заданиям cron или системам управления процессами. В таких случаях вы можете использовать длинный опрос для непрерывной проверки и обработки заданий в очереди.
    • Создайте PHP-скрипт, например, queue-worker.php, со следующим кодом:

      <?php
      
      require __DIR__.'/path/to/your/project/vendor/autoload.php';
      require_once __DIR__.'/path/to/your/project/bootstrap/app.php';
      
      use Illuminate\Support\Facades\Artisan;
      
      while (true) {
       Artisan::call('queue:work', [
           '--daemon' => true,
           '--once' => true,
       ]);
      
       usleep(500000); // Sleep for 0.5 seconds before checking again.
      }
    • Замените /path/to/your/projectфактическим путем к файлам вашего проекта Laravel.
    • Загрузите сценарий queue-worker.phpв свою учетную запись общего хостинга и выполните его, открыв его URL-адрес в браузере или используя такой инструмент, как cURL.