При добавлении отдельного веб-сайта с очередью Laravel в Supervisor отложенные задания обрабатываются так, как должны.
Когда я добавляю другой веб-сайт в Supervisor, отложенные задания не обрабатываются ни для одного из веб-сайтов / очередей.
Я попытался перечитать, перезагрузить и перезапустить службу. В файле supervisord.log отображаются все запущенные процессы, но задания не запускаются.
Если я остановлю всех, кроме 1 работника, очередь сработает.
Laravel 5.7
Супервизор 3.3.1
redis-cli 3.2.6
Debian / Nginx
sudo nano /etc/supervisor/conf.d/website-a-worker.conf
[program:website-a-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/website.a/artisan queue:work redis --sleep=3 --tries=3
autostart=true
autorestart=true
#user=laravel
numprocs=8
autostart=true
autorestart=true
stdout_logfile=/var/www/website.a/storage/logs/worker.log
stderr_logfile=/var/www/website.a/storage/logs/worker.err.log
sudo nano /etc/supervisor/conf.d/website-b-worker.conf
[program:website-b-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/website.b/artisan queue:work redis --sleep=3 --tries=3
autostart=true
autorestart=true
#user=laravel
numprocs=8
autostart=true
autorestart=true
stdout_logfile=/var/www/website.b/storage/logs/worker.log
stderr_logfile=/var/www/website.b/storage/logs/worker.err.log
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start website-a-worker:*
sudo supervisorctl start website-b-worker:*
// config/queue.php
...
'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => 'default',
'retry_after' => 600,
'block_for' => null,
],
...
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
class SomeJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function handle()
{
\Log::info('This only gets triggered if 1 supervisor worker is running.');
}
}
> sudo service supervisor restart
> cd /var/www/website.a
> php artisan tinker
>>> App\Jobs\SomeJob::dispatch()->delay(1);
# Job does not get triggered
>>> exit
Работа никогда не запускается.
Однако, если я остановлю супервизора для website.b, website.a будет обрабатывать задания.
> sudo supervisorctl stop website-b-worker:*
website-b-worker:website-b-worker_02: stopped
website-b-worker:website-b-worker_03: stopped
website-b-worker:website-b-worker_00: stopped
website-b-worker:website-b-worker_01: stopped
website-b-worker:website-b-worker_06: stopped
website-b-worker:website-b-worker_07: stopped
website-b-worker:website-b-worker_04: stopped
website-b-worker:website-b-worker_05: stopped
> php artisan tinker
>>> App\Jobs\SomeJob::dispatch()->delay(1);
# Job gets triggered!
Как мне запустить несколько рабочих (хотя бы по 1 на каждый сайт)?