Я успешно сконфигурировал и использовал gearman и его расширение pecl php. Я использую его для выполнения длительного процесса, касающегося длинных запросов sql в фоновом режиме. Я использую Yii btw, если эта деталь помогает.
Вот как я его использую:
public function actionProcessWithGearman(){ $output = shell_exec('gnome-terminal -e "php workers/worker.php" > /dev/null 2>/dev/null &'); $client = new GearmanClient(); $client->addServer(); $result = $client->doBackground('executeJob',//parameters); }
Некоторые детали:
Если вы заметили, что я сначала запустил gnome-терминал , чтобы я мог видеть этот процесс, а не напрямую обращаться к команде php , я также добавил / dev / null, чтобы он больше не ожидал ответа. А затем рабочий проснулся и руководит работой.
Проблема:
Моя проблема возникает, когда это действие выполняется несколько раз или выполняется несколькими пользователями в разных клиентах , и в результате создается несколько терминалов, на которых запущен work.php .
Как у меня есть только один рабочий? и даже если у меня может быть несколько сотрудников для нескольких пользователей в разных клиентах, как мне закрыть работника каждый раз, когда задача будет завершена?