Sphinx centos 7 автозапуск

Обновлено: 07.07.2024

В CentOS для добавления сервисов (приложений) в автозагрузку существует служба chkconfig. При условии, что эти сервисы установлены из репозитория командой yum.
Чтобы включить автозагрузку, то есть чтобы приложение запустилось при старте сервера (при загрузке операционной системы) необходимо выполнить следующую команду:

Уровни выполнения в CentOS

Уровень 0 — остановка системы (halt) — работа системы должна быть прекращена;
Уровень 1 — однопользовательский режим работы — система инициализирует минимум служб и даёт единственному пользователю (как правило, суперпользователю) без проведения аутентификации командную строку. Как правило, этот режим используется для восстановления системы;
Уровень 2 — многопользовательский режим — пользователи могут работать на разных терминалах, вход в систему с процессом аутентификации;
Уровень 3 — многопользовательский сетевой режим — в отличие от предыдущего уровня, осуществляется настройка сети и запускаются различные сетевые службы;(используется преимущественно на серверных системах)
Уровень 4 — не имеет стандартного толкования и практически не используется;
Уровень 5 — запуск графической подсистемы — по сравнению с уровнем 3 производится также старт графической подсистемы X11, и вход в систему осуществляется уже в графическом режиме;
Уровень 6 — перезагрузка системы — при включении этого режима останавливаются все запущенные программы и производится перезагрузка.
Чтобы узнать текущий уровень выполнения достаточно выполнить команду runlevel.

В моем примере сервер находится на уровне выполнения 3, что является нормальным режимом его работы.

Автозагрузка на конкретные уровни выполнения Linux

По-умолчанию, команда chkconfig прописывает сервисы в автозагрузку по уровням 2, 3, 4, 5. Если необходимо изменить такой порядок, то следуют использовать следующие параметры:

Краткий список полезного применения утилиты chkconfig

Добавить в автозагрузку

Проверить включена ли служба в автозагрузку

Включить службу на всех уровнях (2, 3, 4, 5)

Включить службу на определенных уровнях

Выключить службу на всех уровнях (2, 3, 4, 5)

Выключить службу на определенных уровнях

Удалить службу из автозагрузки

Благодарности

Список источников информация с которых была использована при написании статьи:

Установка и настройка Sphinx 2.2.11 (Yii и дельта-индексы) на Ubuntu / Debian и RHEL / CentOS 7


После перехода с версии 1 на 2 в sphinx много изменений. Больше не работают запросы в командной строке через searh, удалены многие директивы из конфигурационного файла и другое. Будем разбираться.

Установка Sphinx 2.2.11 на Ubuntu / Debian и RHEL / CentOS 7

Для начала нужно поставить пакет:

Ubuntu/Debian:
aptitude install sphinxsearch

Настройка Sphinx 2.2.11 на Ubuntu / Debian и RHEL / CentOS 7

Ubuntu/Debian:
nano /etc/sphinxsearch/sphinx.conf

RHEL/CentOS:
vi /etc/sphinx/sphinx.conf

Сам конфигурационный файл Sphinx состоит из блоков для source, indexer и searchd.
Вот пример конфигурации Sphinx + дельта-индексы:

Sphinx delta index. Индексирование больших объёмов данных.

Настройка Sphinx для Yii2

Индексация, запуск и проверка Sphinx

После настройки конфигурационного файла sphinx нужно проиндексировать все source, которые мы создали:
indexer --all

Запускаем Sphinx командой:
systemctl start searchd

Чтобы проверить, можно воспользоваться такой командой:
systemctl status searchd
или
systemctl status sphinxsearch

Также, чтобы убедиться, что служба работает и слушает заданные порты:
ps aux | grep search
lsof -i tcp:9306
lsof -i tcp:9312

Раньше (в sphinx 1.x) можно было проверить поиск в консоли:
search -i название_индекса "слова поиска"

Теперь эту функцию убрали, но, всё равно есть возможность проверить, всё ли хорошо с индексацией и попадают ли нужные слова в индекс.

Вместо поиска в консоли sphinx можно использовать следующую команду:
indextool --dumphitlist sphinx_index_course "какое-нибудь слово" | more

Кроме того, можно проверить поиск с помощью MySQL-клиента, как предлагает разработчик Sphinx:

Ошибки при запуске Sphinx

Sphinx

Sphinx - поисковый сервер и открытым исходным кодом (Open Source Search Server) для индексации контента из баз данных и осуществления полнотекстового поиска, разработанный Андреем Аксеновым. В статье пошагово рассказано как установить и настроить поисковый сервер Sphinx на сервер под управлением операционной системы Linux (Ubuntu/Dedian). Приведены примеры, советы и ссылки которые будут полезны как администраторам так и разработчикам.

Прежде чем приступить к пошаговому мануалу по установке и настройке поискового сервера Sphinx хочу вам рассказать как я познакомился с данной системой и что послужило толчком к ее использованию.

Вступление

С самого начала, когда только начинал программировать на PHP и писал несложные сайты, я использовал собственный самописный поисковый движок с простой логикой. Он воспринимал одно и несколько слов в поисковой фразе и выдавал те записи в которых было обнаружено вхождение. Сначала делал с индексированием контента и кешированием индекса, потом делал полнотекстовый поиск на PHP.

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

Поиск от Яндекса и его минусы

Позже я узнал про поиск от Яндекса, который без особого труда можно прикрутить к своему сайту используя Yandex XML Search API. К моему движку был написан модуль для осуществления поиска используя Yandex XML Search API и казалось бы все просто супер но со временем меня начали не устраивать некоторые ограничения и неудобства при работе с Yandex XML Search.

Вот что мне показалось неудобным при использовании Yandex XML Search API:

  • ограничение на количество запросов в сутки, а потом еще сделали график ограничений для разного времени суток. Хотите уменьшить ограничения. отправьте СМС на номер. шутка, можно стать партнером Яндекса, для аккаунта зарегистрироваться в партнерской сети Яндекс Директ (РСЯ), связаться с поддержкой Яндекса и рассказать им зачем вам нужно большое количество запросов к Yandex XML Search API.
  • поиск производится только по контенту, который проиндексирован Яндексом. Если странички нет в индексе Яндекса - ее вы никогда не увидите в поисковой выдаче своего сайта.
  • привязка сайта к стороннему сервису, зависимость поиска от него.

Поисковый движок Sphinx

И тут я вспомнил что читал когда-то на Хабре и еще на каком-то блоге по HighLoad-проектам о мощном бесплатном поисковом движке с расширенным анализом и множеством возможностей по настройке и интеграции. Назывался этот движок Sphinx(сфинкс). Очень удачное название, хорошо запоминается и легко ищется в Google/Yandex.

Основные характеристики и возможности Sphinx:

  • индексирование: до 10-15Мб на каждое ядро микропроцессора;
  • поиск: 150-250 поисковых запросов в секунду на каждое ядро при 1Млн документов в индексе;
  • высокая масштабируемость;
  • распределенный поиск;
  • поддержка до 32 и более полей при полнотекстовом поиске;
  • поддержка дополнительный атрибутов для каждого из индексируемых документов;
  • возможность использовать стоп слова;
  • поддержка однобайтовых (СЗ1251 и т.п) и двухбайтовых кодировок (UTF-8);
  • морфологический поиск с модулями для разных языков;
  • поддержка MySQL и PostgreSQL из коробки;
  • поддержка других ODBC совместимых баз данных;
  • кроссплатформенность;
  • готовые к использованию решения API для языков PHP, Python, Java.

Сфинкс используется на многих высоконагруженных проектах, к примеру это Хабрахабр, Викимапия и другие. Система себя зарекомендовала с наилучшей стороны, известно что существует поисковый кластер в котором проиндексировано около 3 миллиардов документов и который осуществляет более 50 миллионов поисковых запросов в сутки.

Полистав документацию и прочитав бегло несколько русских/английских статей по установке в уме быстро очертил себе четкий алгоритм действий. Со своим опытом установки и настройки Sphinx я хочу сейчас познакомить тебя, мой дорогой читатель.

Как это работает

На сервер ставится поисковый демон Sphinx, который индексирует через заданный промежуток времени статьи и контент вашего сайта - создает поисковый индекс.

На вашем сайте подключается Sphinx API, который есть для Java, PHP, Ruby (можно написать реализацию и для других языков), пишется поисковый модуль который делает несложные запросы к демону(сервису) Sphinx - searchd.

При запросе поисковой фразы с поисковой формы сайта через Sphinx API делается обращение к демону searchd, который нам возвращает ID записей с нужной сортировкой и фильтрацией. Дальше имея ID публикаций мы делаем один запрос к БД сайта и получаем всю информацию о наших статьях, остается только красиво вывести список найденных элементов.

Установка и настройка Sphinx на Linux

Предполагается что у вас уже установлена ОС Linux, на которой будет работать (или уже работает ) сайт или сервис, на котором нужно будет использовать Sphinx Search API.

Обновляем источники пакетов и ставим нужный софт:

Теперь компилируем наш Сфинкс с поддержкой MySQL (есть поддержка и других БД, смотри док.), поскольку весь полезный контент сайта хранится в БД MySQL:

Копируем шаблон файла с настройками и редактируем его содержимое под наши нужды:

В конфигурационном файле достаточно много настроек и все они заключены в секции где для каждого источника индексируемых данных описываются свои специфические опции и данные для доступа.

Приводить полное описание всех настроек я не буду, в шаблонном файле все хорошо документировано, а также в официальной документации (смотри ссылки в конце статьи) все понятно изложено. Чтобы все изначально прояснить приведу здесь текст своего конфигурационного файла с подробными комментариями:

Запускаем индексацию наших данных:

В случае успешного индексирования получим примерно вот такие строки:

Запускаем поискового демона:

В случае успешного запуска должны увидеть примерно вот такой вывод:

Делаем тестовый поисковый запрос, где YOUR_QUERY_STRING - ваша поисковая фраза:

После запуска будет выведена длинная простыня записей что отвечают критериям поиска.

Проверяем работу поиска с использованием PHP API. Внимание: PHP должен быть установлен на сервере! "YOUR_QUERY_STRING" - ваш поисковый запрос

Надеюсь у вас все получилось.

Скрипт автозапуска searchd для init.d

Теперь нужно сделать так чтобы демон searchd стартовал при загрузке/перезагрузке операционной системы. Ниже приведен пример создания и настройки скрипта для Debian/Ubuntu GNU/Linux без использования systemd.

Откроем для редактирования новый скрипт инициализации в папке "/etc/init.d":

Копируем и вставляем следующий текст (CTRL+C, CTRL+V) в скрипт /etc/init.d/searchd :

Установим права на скрипт запуска и зарегистрируем его в автозапуске:

Для надежности можете перезагрузить свой сервер и проверить запустился ли демон searchd:

Скрипт автозапуска searchd для systemd

В более новых версиях GNU/Linux уже присутствует такой мощный набор управления системой как systemd. Чтобы добавить наш демон searchd в автозапуск системы с использованием systemd нужно проделать несколько несложных операций.

Откроем для редактирования новый файл будущего скрипта для управления запуском searchd:

Копируем в редактор следующий текст скрипта:

Устанавливаем права на запуск скрипта:

Создаем конфигурационный файл для нашее службы (демона):

Копируем в редактор следующее содержимое:

Все должно работать!

Настройка автоматической переиндексации

Добавляем в системный планировщик заданий (крон, crontab) запуск индексатора через каждые сутки:

Добавляем в конец содержимого файла следующую строчку:

Все готово! Вы установили и настроили поисковый сервер .

Защита служебных портов

После настройки и запуска поискового сервера Sphinx важно помнить что его демн открывает порты 9312, 9306 (указанные в настройках) и делает их доступными на всех интерфейсах. Настоятельно рекомендую закрыть их от внешнего мира при помощи файрвола на внешнем интерфейсе (интернет). Вот два простых правила для IPTABLES:

Где eth0 - имя сетевого интерфейса, который смотрит в интернет.

Пример взаимодействия со Sphinx на PHP

Итак, сервер настроен все проиндексировано, работоспособность проверена. Качаем себе Sphinx API класс для работы в PHP:

Помещаем скрипт sphinxapi.php в свой проект и подключаем этот скрипт при помощи include/require.

Вот простая реализация подключения и выборки при помощи PHP(код для примера):

Заключение

Ниже привожу полезные ссылки по поисковому серверу Sphinx. Этой информации с лихвой достаточно чтобы во всем разобраться и настроить под себя.

    - официальный сайт. - документация. - Wiki документация по Sphinx на одной странице. - Wiki документация по PHP API для Sphinx.

UPD: последняя версия Sphinx с открытым исходным кодом - 2.3.2-beta. В последующих версиях код автором теперь не предоставляется, есть только готовые сборки с бинарными файлами.

Рекомендую обратить свое внимание на проект Manticore Search, который базируется на форке последней Open Source версии движка Sphinx и имеет множество улучшений и фич!

date

21.04.2020

directory

CentOS, Linux

comments

комментариев 8

В данной статье мы рассмотрим основы управлением автозагрузкой сервисов и скриптов в Linux CentOS 7/8. В частности, разберем основы работы с демоном systemd, научимся добавлять в автозагрузку сервисы и убирать их оттуда, а также рассмотрим альтернативные варианты запуска скриптов или демонов после старта системы.

Задача статьи – научить вас быстро разобраться со списками служб и скриптов которые запускаются в Linux автоматически, добавить в автозагрузку свои службы или скрипты, или отключить автозапуск определённых программ.

Systemd: управление автозагрузкой служб в Linux

В большистве популярных современных популярных дистрибутивов Linux (CentOS 7, RHEL, Debian, Fedora и Ubuntu) в качестве демона автозагрузки вместо init.d используется systemd. Systemd – менеджер системы и служб Linux, используется для запуска других демонов и управления ими в процессе работы, использует unit-файлы из /etc/systemd/system (init.d использовал скрипты из каталога /etc/init.d/). Systemd позволяет распараллелить запуск служб в процессе загрузки ОС, тем самым ускоряя запуск.

Для управления system используется команда systemctl.

Для начала, после загрузки системы, мы проверим список юнитов, которые в данный момент добавлены в systemd:

systemctl list-units

Список unit-файлов можно получить командой:

Данная команда отобразит все доступные юнит-файлы (не зависимо от того, были они загружены в systemd после загрузки ОС или нет).

Чтобы вывести список активных сервисов и их состояние, выполните:

Как видим из списка, здесь отображаются даже сервисы, которые не были найдены на диске «not-found».

Использую данную команду, вы можете добавить и другие флаги, например:

systemctl list-units —type=service вывести список сервисов в centos

Добавление сервиса в systemd

Для управления сервисами в systemd используется особый синтаксис. После имени серверсв в конце нужно указывать .service. Например:

systemctl enable nginx.service – команда добавит в автозагрузку веб-сервер nginx

Данная команда создаст символическую ссылку на копию файла, указанного в команде сервиса, в директории автозапуска systemd.

Вывод этой команды показывает в какой директории был создан симлинк на файл сервиса.

Чтобы посмотреть добавлен тот или иной сервис в автозагрузку, можно проверить его статус:

systemctl status nginx.service

При выводе нужно обратить внимание на строку:

Значение enabled означает что данный сервис загружается автоматически (добавлен в автозагрузку). Если сервис не загружается автоматом, здесь буде указано disabled.

Удаление сервиса из systemd

Вы можете удалить сервис из автозагрузки, чтобы он не запускался после старта Linux (при этом сам сервис с сервера не удаляется). Чтобы удалить сервис из автозагрузки, выполните команду:

systemctl disable нужный_сервис

Например, чтобы удалить из автозагрузки nginx, выполните:

После выполнения команды, симлинк на файл сервиса будет удален из директории systemd. Можно проверить, есть ли юнит в автозагрузке:

Systemd: маскировка юнитов

В моей практике встречались «вредные» сервисы, которые после удаления их из автозагрузки, все равно там оставались и запускались после рестарта ОС. Чтобы решить этот вопрос, можно замаскировать сервис:

systemctl mask nginx.service

И после этого, он вообще не будет запускаться, ни вручную, ни после перезагрузки ОС:

Снять маску можно командой:

Если после маскировки сервиса, вы проверите юнит-файлы, то увидите, что сервис помечен как замаскированный (состояние masked):

systemctl mask маскировка сервиса

Таким нехитрым способом, можно избавить себя от удаления сервиса, даже если он не удаляется из автозагрузки systemd.

Автозапуска скриптов и сервисов с помощью rc.local

Для запуска различных скриптов при загрузке Linux чаще всего используется rc.local.

Но помимо скриптов, через rc.local так же можно и запускать сервисы, даже те, которые запускаются через systemd. Не могу ответить на вопрос, для чего использовать в таком случае rc.local, если есть systemd, но пару примеров я приведу.

Начнем с того, что файл /etc/rc.local должен быть исполняемым:

chmod +x /etc/rc.local

Rc.local должен быть добавлен в автозагрузку systemd:

systemctl enable rc-local

И на примере того же nginx, мы можем добавить в rc.local команду запуска веб-сервера:

service nginx start

rc.local - автозапуск команда в libux centos

Но я редко использую rc.local для запуска сервисов. Чаще rc.local используется, когда нужно запустить скрипт, либо выполнить разово какую-то команду.

К примеру, я создал скрипт /root/test.sh который выполняет некоторые действия, и хочу запустить его сразу после запуска системы. Добавляем в файл rc.local строку:

rc.local запуск sh скрипта

Начиная с CentOS 7, разработчики указывают на то, что rc.local устаревший демон и осуществлять автозапуск скриптов или сервисов через него, это прошлый век. Но пока он работает, я пользуюсь им, так как он очень прост в эксплуатации.

Создание собственного демона и добавление его в systemd

Вы можете создать собственный демон, которым можно будет управлять через systemd.

Например, нам нужно запускать все тот же скрипт /root/test.sh после перезагрузки системы. Начнем с создания файла нашей будущей службы:

touch /etc/systemd/system/test-script.service
chmod 664 /etc/systemd/system/test-script.service
nano /etc/systemd/system/test-script.service

Содержимое файла будет следующее:

User – пользователь под которым будет запускаться демон

Type=oneshot — процесс будет завершен до запуска дальнейших юнитов

Если вас устроило то, как работает сервис, добавьте его в автозагрузку:

Таким образом, вы можете добавить любой ваш скрипт в автозагрузку через systemd.

Автозапуск через cron

Если вам с какой-то периодичностью нужно запускать скрипт или команду, вы можете воспользоваться cron-ом:

crontab -e — открыть терминал для написания задания cron

И добавьте туда нужное вам задание, например:

* * * * * /root/test.sh — запускать скрипт каждую минуту.

Можно написать скрипт watch-dog, который по заданию будет проверять, например, статус какого-либо сервиса и, если он не работает, запускать его. На нескольких своих проектах я использую подобную схему.

Чтобы вывести список всех заданий в крон, нужно выполнить команду:

Допустимые значения для времени запуска заданий cron по порядку:

  • Минуты от 0 до 59
  • Часы от 0 до 59
  • День месяца от 1 до 31
  • Месяц от 1 до 12
  • День недели от 0 до 7 (0 или 7 это воскресение)

В нашем задании скрипт запускается каждую минуту, поэтому там стоят «*».

Так же вы можете разместить нужный вам скрипт в директориях cron:

Скрипты в указанных директория будут запускаться согласно автоматически подготовленного расписания.

.bashrc: автозапуск скриптов при запуске терминала

Если вам требуется выполнять какие-то действия при запуске терминала ssh, вы можете добавить любую команду или выполнение скрипта в .bash_profile или .bashrc. Теоретически, вы можете добавить какое-либо действие в любой из этих файлов, оно выполнится в любом случае. Обычно все необходимое добавляется в .bashrc, а сам .bashrc запускают из .bash_profile.

Я добавил в файл .bashrc команду на рестарт веб-сервиса nginx:

service nginx restart

.bash_profile - запуск скрипта при старте сессии

После этого сохранил файл и перезапустил терминал:

пример автозапуска скрипта через сессию

Как видите, при запуске терминала, веб-сервер был перезапущен. Какие действия можно выполнять при запуске терминала? Вероятно, запускать какие-то вспомогательные утилиты, например, проверка uptime сервера:

показывать uptime при входе

Или вы хотите, чтобы при запуске терминала, вы сразу попадали в нужную вам директорию и запускали mc, добавьте в .bashrc


Надеюсь эта статья по управлению автозапуском сервисов и скриптов в LInux (статья писалась для CentOS) оказалась полезной для вас. Наверняка тем, кто только познает азы системного администрирования Linux, это информация будет кстати.

Читайте также: