Как запустить работника очереди на виртуальном хостинге - PullRequest
0 голосов
/ 11 сентября 2018

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

Но я не знаю, как я могу постоянно выполнять команду php artisan queue:worker в фоновом режиме. Я нашел эту тему там, где это был самый голосующий подход:

$schedule->command('queue:work --daemon')->everyMinute()->withoutOverlapping();

Однако в другом потоке некоторые люди жаловались, что вышеупомянутая команда создает работника с несколькими очередями.

Как мне безопасно запустить работника очереди?

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Начиная с Laravel 5.7, есть новая команда очереди, которая перестает работать, когда пуста:

php artisan queue:work --stop-when-empty

Поскольку это в основном только для электронных писем или нескольких небольших заданий, я помещаю их наКронджоб, чтобы бежать каждую минуту.Я бы сказал, что это решение не для более чем 100 заданий в минуту, но работает для моих электронных писем.Это будет выполняться примерно 5 секунд каждую минуту только для отправки писем, в зависимости от того, сколько писем или насколько велико задание.

Шаги

  1. Создать новую команду: php artisan make:command SendContactEmails
  2. В SendContactEmails.php изменить: protected $signature = 'emails:work';
  3. В методе handle() добавить:
return $this->call('queue:work', [
    '--queue' => 'emails', // remove this if queue is default
    '--stop-when-empty' => null,
]);
Расписание вашей команды каждую минуту:
protected function schedule(Schedule $schedule)
{
    $schedule->command('emails:work')->everyMinute();
    // you can add ->withoutOverlapping(); if you think it won't finish in 1 minute
}
Обновите ваши cronjobs:
* * * * * /usr/local/bin/php /home/username/project/artisan schedule:run > /dev/null 2>&1

Источник

Обработка всех заданий в очереди и затем выход

Параметр --stop-when-empty может использоваться для указания работнику обрабатывать все задания и затем корректно завершать работу.Эта опция может быть полезна при работе с очередями Laravel в контейнере Docker, если вы хотите закрыть контейнер после того, как очередь пуста:

php artisan queue:work --stop-when-empty
0 голосов
/ 11 сентября 2018

вы используете cpanel?

вы можете установить в меню Scheduler или Cron Jobs.и установите команду там

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...