Wicked
Новичок
proc_open, proc_terminate & sphinx searchd
Делаю сервис, где юзерам дается возможность закачивать тексты (много текстов) для классификации моим серисом - тексты будут опробироваться на содержание большого кол-ва фраз-терминов. Как бэкграунд технического решения выбрал сфинкс. Типичный способ работы со сфинксом, думаю, будет выглядеть как-то так:
1. принять тексты и положить в MySQL или файлы.
2. сгененрировать уникальный конфигурационный файл для sphinx (уникальное расположение файлов индексов, уникальный порт).
3. запустить sphinx indexer.
4. запустить sphinx searchd --console.
5. в цикле опробировать термины.
6. положить sphinx searchd.
7. удалить индекс и конфигурационный файл.
Важно иметь в виду, что, поскольку сфинкс будет подниматься
Для запуска и остановки сфинксового searchd присматриваюсь к [m]proc_open[/m](), [m]proc_terminate[/m]().
Интересуют аспекты, как бы так поправильнее гарантировать, что searchd будет умирать вместе с пхпшным скриптом, в крайнем случае - немножко позже.
Proc_terminate в конце скрипта, в деструкторе или shutdown'е - разумеется.
Можно при запуске собирать их PID'ы и порты (в базу) с таймштампом, когда можно убивать (час спустя, например), но как наиболее правильно убивать searchd кроном, если мы знаем PID? Ведь вполне может оказаться, что к моменту запуска крона этот PID уже будет переиспользован?
Как правильно выбирать уникальный незанятый порт?
PS: про утулиту search я знаю, но Аксёнов писал, что в продакшене ее использовать не стоит. А так да, было бы удобней искать через пайп.
Делаю сервис, где юзерам дается возможность закачивать тексты (много текстов) для классификации моим серисом - тексты будут опробироваться на содержание большого кол-ва фраз-терминов. Как бэкграунд технического решения выбрал сфинкс. Типичный способ работы со сфинксом, думаю, будет выглядеть как-то так:
1. принять тексты и положить в MySQL или файлы.
2. сгененрировать уникальный конфигурационный файл для sphinx (уникальное расположение файлов индексов, уникальный порт).
3. запустить sphinx indexer.
4. запустить sphinx searchd --console.
5. в цикле опробировать термины.
6. положить sphinx searchd.
7. удалить индекс и конфигурационный файл.
Важно иметь в виду, что, поскольку сфинкс будет подниматься
Для запуска и остановки сфинксового searchd присматриваюсь к [m]proc_open[/m](), [m]proc_terminate[/m]().
Интересуют аспекты, как бы так поправильнее гарантировать, что searchd будет умирать вместе с пхпшным скриптом, в крайнем случае - немножко позже.
Proc_terminate в конце скрипта, в деструкторе или shutdown'е - разумеется.
Можно при запуске собирать их PID'ы и порты (в базу) с таймштампом, когда можно убивать (час спустя, например), но как наиболее правильно убивать searchd кроном, если мы знаем PID? Ведь вполне может оказаться, что к моменту запуска крона этот PID уже будет переиспользован?
Как правильно выбирать уникальный незанятый порт?
PS: про утулиту search я знаю, но Аксёнов писал, что в продакшене ее использовать не стоит. А так да, было бы удобней искать через пайп.
