Использование нескольких конфигураций Sphinx

Разрабатывая на одном хосте несколько сайтов с поддержкой Sphinx Search меня всегда раздражала невозможность использования несколько конфигурационных файлов одновременно единственным демоном Sphinx, а также отсутствие простых готовых решений для реализации подобного функционала.

К написанию своего решения этой проблемы меня подтолкнула заметка о том что в качестве конфигурационного файла можно использовать любой скрипт, в том числе написанный на bash‘е.

Для универсального комбинатора конфигурационных файлов использую типичную *nix структуру директорий:

/etc/sphinx/
    conf.d/
        100-example-domain.ru
        200-example-domain-2.ru
        999-searchd
    sphinx-config.bash

Где conf.d — директория с симлинками на конфигурационные файлы для индексов, а содержимое файла sphinx-config.bash

#!/bin/bash

WORKDIR=`dirname $0`
CONFDIR="$WORKDIR/conf.d/"
LINE=$(seq -s "#" 70 | sed 's/[0-9]//g')
if [ ! -d "$CONFDIR" ]; then
  echo "# Path '$CONFDIR' is incorrect."
  exit 1
fi
for file in "${CONFDIR%?}"/*
do
  if [[ -f $file ]]; then
    FILENAME=$(basename "$file")
    echo -e "${LINE}\n# Include file ${FILENAME}\n${LINE}\n"
    cat "$file"
  fi
done

Далее просто запускаю демона Sphinx, используя в качестве конфигурационного файла sphinx-config.bash.

/usr/local/sphinx/bin/searchd --config /etc/sphinx/sphinx-config.bash

Готовую реализация залил на GitHub sphinx-config-combinator.