Создание фонового процесса в Yii2

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
checkstar
Сообщения: 14
Зарегистрирован: 2020.06.09, 11:47

Создание фонового процесса в Yii2

Сообщение checkstar »

Всем привет.
Задался вопросом о том, как можно создать фоновый процесс в yii.
Есть задача: при определенных действиях пользователя необходимо создать отдельный фоновый процесс, который будет выполнять различные действия по данным, переданным пользователем. Эти процессы обновляют информацию о своем состоянии в БД, и пользователь видит их состояние независимо от самого скрипта.

Таких процессов может быть много.
Как такое правильнее всего реализовать?
Не увидел в yii подобных функций

Спасибо
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Создание фонового процесса в Yii2

Сообщение samdark »

checkstar
Сообщения: 14
Зарегистрирован: 2020.06.09, 11:47

Re: Создание фонового процесса в Yii2

Сообщение checkstar »

samdark писал(а): 2020.06.12, 10:52 Вот так: https://github.com/yiisoft/yii2-queue
Большое спасибо, буду разбираться
checkstar
Сообщения: 14
Зарегистрирован: 2020.06.09, 11:47

Re: Создание фонового процесса в Yii2

Сообщение checkstar »

samdark писал(а): 2020.06.12, 10:52 Вот так: https://github.com/yiisoft/yii2-queue
Не совсем понятно, где размещать класс с задачами на процесс ?
И есть ли какой-то готовый пример ?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Создание фонового процесса в Yii2

Сообщение samdark »

Где удобно, там и размещайте.
checkstar
Сообщения: 14
Зарегистрирован: 2020.06.09, 11:47

Re: Создание фонового процесса в Yii2

Сообщение checkstar »

samdark писал(а): 2020.06.14, 18:07 Где удобно, там и размещайте.
Я так понимаю, принцип работы основан на запуске одного или нескольких воркеров, которые постоянно отслеживают очередь через драйвер (в моем случае, в БД), и, если в БД появляется новая запись, то воркер запускает этот процесс в работу, верно ?

Настроил всё по документации, однако:

Код: Выделить всё

yii-queue@1.service - Yii Queue Worker 1
   Loaded: loaded (/etc/systemd/system/yii-queue@.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Mon 2020-06-15 13:54:06 MSK; 1min 23s ago
  Process: 5259 ExecStart=/usr/bin/php /var/www/oleg/data/www/hm.ru/basic/yii queue/listen --verbose (code=exited, status=1/FAILURE)
 Main PID: 5259 (code=exited, status=1/FAILURE)

Jun 15 13:54:06 tg-mailer.com systemd[1]: yii-queue@1.service: Main process exited, code=exited, status=1/FAILURE
Jun 15 13:54:06 tg-mailer.com systemd[1]: yii-queue@1.service: Failed with result 'exit-code'.
Jun 15 13:54:06 tg-mailer.com systemd[1]: yii-queue@1.service: Service RestartSec=100ms expired, scheduling restart.
Jun 15 13:54:06 tg-mailer.com systemd[1]: yii-queue@1.service: Scheduled restart job, restart counter is at 5.
Jun 15 13:54:06 tg-mailer.com systemd[1]: Stopped Yii Queue Worker 1.
Jun 15 13:54:06 tg-mailer.com systemd[1]: yii-queue@1.service: Start request repeated too quickly.
Jun 15 13:54:06 tg-mailer.com systemd[1]: yii-queue@1.service: Failed with result 'exit-code'.
Jun 15 13:54:06 tg-mailer.com systemd[1]: Failed to start Yii Queue Worker 1.
Все пути указаны правильно.
Запуск из папки с проектом через yii результата не дает - неизвестная функция
checkstar
Сообщения: 14
Зарегистрирован: 2020.06.09, 11:47

Re: Создание фонового процесса в Yii2

Сообщение checkstar »

Добавил конфиг queue в файл консольных настроек
Запускаю через

Код: Выделить всё

php yii queue/run
Ответ один:

Код: Выделить всё

Unknown command: queue/run
Заранее извиняюсь, если чего не понимаю
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Создание фонового процесса в Yii2

Сообщение samdark »

Я так понимаю, принцип работы основан на запуске одного или нескольких воркеров, которые постоянно отслеживают очередь через драйвер (в моем случае, в БД), и, если в БД появляется новая запись, то воркер запускает этот процесс в работу, верно ?
Примерно так, да.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Создание фонового процесса в Yii2

Сообщение samdark »

В бутстрап добавили всё? https://github.com/yiisoft/yii2-queue/b ... figuration
checkstar
Сообщения: 14
Зарегистрирован: 2020.06.09, 11:47

Re: Создание фонового процесса в Yii2

Сообщение checkstar »

samdark писал(а): 2020.06.15, 14:10 В бутстрап добавили всё? https://github.com/yiisoft/yii2-queue/b ... figuration
Порядок, спасибо
checkstar
Сообщения: 14
Зарегистрирован: 2020.06.09, 11:47

Re: Создание фонового процесса в Yii2

Сообщение checkstar »

samdark писал(а): 2020.06.15, 14:10 В бутстрап добавили всё? https://github.com/yiisoft/yii2-queue/b ... figuration
Всё отладил, большое спасибо.
Только вот пришёл ещё один вопрос на ум - можно ли установить некоторый лимит задач, выполняемых одновременно ?
То бишь, сейчас выполняется одна задача, дальше берется следующая из очереди.
Нельзя ли как-то сделать так, чтобы одновременно выполнялось, например, три задачи, а уже четвертая кидалась в очередь ?
Спасибо
checkstar
Сообщения: 14
Зарегистрирован: 2020.06.09, 11:47

Re: Создание фонового процесса в Yii2

Сообщение checkstar »

samdark писал(а): 2020.07.09, 18:28 Да. См. https://github.com/yiisoft/yii2-queue/b ... ng-workers
То есть, нужен отдельный воркер ?
skynin
Сообщения: 400
Зарегистрирован: 2017.12.12, 10:09

Re: Создание фонового процесса в Yii2

Сообщение skynin »

checkstar писал(а): 2020.07.13, 11:30 То есть, нужен отдельный воркер ?
Зависит от того, хотите вы раздельные очереди, или одну, но с несколькими обработчиками.

Вот пример конфига супервизора для одной очереди

Код: Выделить всё

[program:worker_notify]
process_name=%(program_name)s_%(process_num)02d
command=......../myapp/yii qunotify/listen 
autostart=true
autorestart=true
user=www-data
numprocs=4
redirect_stderr=false
stdout_logfile=NONE
numprocs=4 - указывает на 4ре обработчика очереди.
То есть одновременно будут обрабатываться 4 джоба
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
Ответить