При администрировании серверов 1С на базе ОС Ubuntu системные администраторы часто сталкиваются с ситуацией, когда после очередного обновления системы база данных PostgreSQL внезапно перестает запускаться. В системном журнале при этом красуется критическая ошибка: FATAL: could not access file "online_analyze": No such file or directory. На первый взгляд кажется, что файлы базы данных повреждены, но на самом деле проблема кроется в механизме обновления пакетов Linux. В этой статье мы подробно разберем, почему это происходит, и как восстановить работоспособность сервера.
Для начала проанализируем ситуацию. Платформа 1С:Предприятие предъявляет специфические требования к СУБД PostgreSQL. Стандартная ("ванильная") версия PostgreSQL из официальных репозиториев Ubuntu не содержит некоторых оптимизаций, необходимых для высокой производительности 1С. Поэтому фирма 1С (или компания Postgres Pro) выпускает свои модифицированные сборки.
Ключевыми компонентами таких сборок являются модули online_analyze и plantuner.
online_analyze крайне важен для 1С, так как платформа постоянно создает и удаляет временные таблицы. Стандартный планировщик PostgreSQL не всегда успевает собирать по ним статистику, что приводит к медленной работе запросов. Этот модуль заставляет систему анализировать статистику мгновенно.
plantuner позволяет более гибко управлять индексами в запросах 1С.
Проблема возникает в момент выполнения команды apt upgrade. Система видит, что в репозиториях Ubuntu появилась более новая минорная версия (например, обновление с 10.5 до 10.6). Менеджер пакетов заменяет установленные специализированные файлы от 1С на стандартные пакеты Ubuntu. В стандартных пакетах библиотек online_analyze.so физически не существует, но в файле конфигурации postgresql.conf параметр shared_preload_libraries все еще требует их загрузки. В итоге сервер не находит нужный файл и завершает работу с ошибкой FATAL.
Прежде чем приступать к лечению, давайте убедимся, что наши догадки верны. Рассмотрим, как проверить физическое наличие необходимых библиотек. Для 10-й версии PostgreSQL в Ubuntu путь к библиотекам выглядит следующим образом:
/usr/lib/postgresql/10/lib/
Попробуем найти там файл модуля:
ls -la /usr/lib/postgresql/10/lib/ | grep online_analyze
Если команда ничего не возвращает — значит, обновление системы "затерло" вашу специализированную сборку стандартной. Система больше не знает, что такое online_analyze.
Разберем по шагам процесс восстановления. Нам необходимо вернуть те версии пакетов, которые предназначены специально для 1С. Если вы скачивали их с портала ИТС, они представляют собой набор .deb файлов.
postgresql-10, postgresql-client-10 и библиотека libpq5..deb от нужной версии (например, 10.5-9.1C или выше) и выполним установку:
sudo dpkg -i libpq5_10.5-10.1C_amd64.deb
sudo dpkg -i postgresql-client-10_10.5-10.1C_amd64.deb
sudo dpkg -i postgresql-10_10.5-10.1C_amd64.deb
dpkg жалуется на недостающие зависимости, выполним sudo apt-get install -f.Самый важный этап, который многие упускают, — это запрет системе трогать эти пакеты в будущем. Чтобы при следующем обновлении apt upgrade ситуация не повторилась, нам нужно "заморозить" текущие версии пакетов.
Рассмотрим, как это сделать с помощью команды apt-mark hold. Нам нужно заблокировать три основных компонента. Выполним в терминале:
sudo apt-mark hold libpq5
sudo apt-mark hold postgresql-10
sudo apt-mark hold postgresql-client-10
Теперь, когда вы будете запускать обновление системы, apt сообщит, что эти пакеты оставлены в неизменном виде (kept back). Это гарантирует, что библиотеки online_analyze останутся на своих местах.
Проанализируем ситуацию, когда сервер нужно запустить немедленно, а нужных .deb пакетов под рукой нет. В этом случае мы можем временно отключить использование проблемных модулей, чтобы PostgreSQL смог стартовать.
Внимание: Это решение приведет к значительному снижению производительности 1С, так как планировщик БД начнет ошибаться в выборе планов запросов!
sudo nano /etc/postgresql/10/main/postgresql.conf.shared_preload_libraries.shared_preload_libraries = 'online_analyze, plantuner'
сделаем:
shared_preload_libraries = ''
sudo systemctl start postgresql.Как только вы получите доступ к дистрибутиву от 1С, обязательно вернитесь к Шагу 1, чтобы восстановить полноценную работу системы.
Мы выяснили, что ошибка online_analyze — это классический конфликт между репозиториями ОС и вендорским ПО. Для предотвращения подобных проблем в будущем:
apt-mark hold сразу после установки PostgreSQL для 1С.apt upgrade внимательно просматривайте список пакетов, которые система собирается обновить.Соблюдение этих простых правил позволит вашему серверу 1С работать стабильно и без внезапных остановок после плановых технических работ.