proc_open, proc_terminate & sphinx searchd

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 я знаю, но Аксёнов писал, что в продакшене ее использовать не стоит. А так да, было бы удобней искать через пайп.
 

whirlwind

TDD infected, paranoid
А зачем убивать демона? Насколько мне известно, их для того и придумали, что бы сэкономить при запуске. И проблема с портами отпадет. Я не эксперт по этой теме, глянул бегло - там же есть атрибуты и фильтры по ним. Нельзя ли ими обойтись, вместо кучи демонов?
 

Wicked

Новичок
А зачем убивать демона? Насколько мне известно, их для того и придумали, что бы сэкономить при запуске.
Потому что меняется индекс. Переиспользовать одного и того же висящего демона - это все пхпшные скрипты выстраивать в очередь. И его все равно придется передергивать, чтобы он подхватил индекс построенный на очередной порции текстов очередного пхпшного скрипта. А если так, то его тогда наверное все равно будет проще поднимать каждый раз заново, просто не больше одной копии за раз...

-~{}~ 29.04.08 17:58:

а PIDы умеют уменьшаться, или только ползут вверх до бесконечности? У разных источников разное мнение.

Пока что придумал инстансы searchd идентифицировать так:
searchd --console --servicename ngy7f83897dy3buod9
Тогда можно с гарантией сказать, тот ли самый это инстанс или нет.
 

phprus

Moderator
Команда форума
Wicked
а PIDы умеют уменьшаться, или только ползут вверх до бесконечности? У разных источников разное мнение.
В линуксах по умолчанию PID растет до 32768, однако это значение можно увеличить во время работы системы путем записи нового значения в /proc/sys/kernel/pid_max, либо путем правки конфига /etc/sysctl.conf (параметр kernel.pid_max)
 

Wicked

Новичок
В линуксах по умолчанию PID растет до 32768
а потом куда? или больше нельзя запускать новые процессы? :)

вообщем пока решил не извращаться - буду экспериментировать с одним постоянно висящим searchd. Сделаю очередь с пулом из 10 датасорсов-индексов. Пул буду хранить в базе. Задачи будут сохраняться туда же.
 

phprus

Moderator
Команда форума
Wicked
а потом куда? или больше нельзя запускать новые процессы?
Почему нельзя то? Можно, но вот их пид будет выбираться из свободных. По этому получается, что у созданных позже процессов может быть меньший pid, чем у более старых.
 
Сверху