Я успешно настроил и использовал gearman и его расширение pecl php. Я использую его для выполнения длительного процесса, связанного с длинными запросами sql в фоновом режиме. Кстати, я использую Yii, если эта деталь поможет.
Вот как я его использую:
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, чтобы он больше не ждал ответа. И тогда работник просыпается и запускает работу.
Проблема:
Моя проблема возникает, когда это действие выполняется несколько раз или выполняется несколькими пользователями в разных клиентах, и в результате создается несколько терминалов с запущенным worker.php.
Как мне иметь только одного работника? и даже если я могу иметь несколько работников для нескольких пользователей в разных клиентах, как закрыть работника каждый раз, когда задача завершена?