Как заставить queue:work работать на хостинге Laravel

271
30 мая 2022, 20:50

Сразу предупреждаю, я знаю, что на эту тему есть много тем. Однако большинство этих тем относятся к 2014 и 2015 годам, когда еще существовал тег --daemon. Есть также некоторые темы 2017 года, которые не полностью объясняют, как сделать все правильно.

Я в контролере отправляю job (драйвер database и таблица jobs (по умолчанию которая))

SendMail::dispatch($supervisorEmail,$project,$candidate);

Вот сам мой SendMail job

class SendMail implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    public $supervisorEmail;
    public $project;
    public $candidate;
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($supervisorEmail,$project,$candidate)
    {
        $this->supervisorEmail = $supervisorEmail;
        $this->project = $project;
        $this->candidate = $candidate;
    }
    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        Mail::to($this->supervisorEmail)->send(new CandidateOrderMail($this->project,$this->candidate));
    }
}

У меня есть только SSH-консоль в пользовании. Заказчик на своем сервере мне выделил отдельную папку (не root-права), поэтому я не могу Supervisord поставить (ему по барабану, как это реализуется, он не дает мне root-права ツ)

Обшарив весь русо-англоязычный интернет, я нашел лишь два более менее понятных и вроде рабочих решений (не пробовал пока еще). Да, есть еще некоторые темы 2017 года в англ. интернете, где поднимался этот вопрос, однако там используется --daemon, который как бы устарел еще в 2015 году. Ребята, выручайте, одним словом.

Два метода этих:

  1. /usr/local/bin/php /home/electro/public_html/artisan queue:work( this is writing to the command line, right)?

  2. nohup php artisan queue:work --daemon &

Что мне использовать из этого? Я просто думаю, если запущу, то откатить назад на сервере будет еще та головная боль.

Желательно, чтобы еще все работало, если сервер перезапустится (или там какая-то ошибка случится)

Answer 1

Желательно, чтобы еще все работало, если сервер перезапустится (или там какая-то ошибка случится)

К сожалению, если нет менеджеров процессов (тот же супервизор), то очередь не надо делать.

Я запускал на shared хостинге очередь при помощи крона, своего .pid файла очереди и --once параметра очереди, но такая реализация - это костыль, который ломается при перезапуске сервака (к счастью на shared хостинге серваки не часто перезагружают).

Если интересно, можешь спросить в личку

READ ALSO
Загрузка изображений на сервер и в БД - PHP

Загрузка изображений на сервер и в БД - PHP

Уважаемые программисты, при использовании кода неккоректно добавляются изображения в БДДанный код загружает без проблем файлы на сервер,...

157
Открыть старую dll

Открыть старую dll

Есть старый ассет для Unity - последняя версия была дляNET 3

191
Групировка Datagrid

Групировка Datagrid

Как сделать групировку datagrid? Мне надо групировка по одному столбцуВот мой DataGrid:

334
C#. Почему не отправляется(или не приходят) email сообщения?

C#. Почему не отправляется(или не приходят) email сообщения?

Не знаю в чем может быть проблемаВ верности почт и пароля я уверен

162