При администрировании серверов 1С:Предприятие на базе Linux системные администраторы нередко сталкиваются с ситуацией, когда СУБД PostgreSQL внезапно прекращает принимать входящие подключения на порт 5432. При этом проверка состояния через systemd может показывать статус active (exited), однако реальный процесс СУБД завершается аварийно сразу после старта.
В системном журнале PostgreSQL (/var/log/postgresql/postgresql-9.6-main.log) при этом фиксируются следующие строки:
FATAL: could not access file "online_analyze": Нет такого файла или каталога
LOG: database system is shut down
Проанализируем детально, почему возникает данная ошибка, как правильно диагностировать состояние кластера и какими способами можно восстановить работоспособность сервера 1С.
Модуль online_analyze — это специализированное расширение, которое входит в состав сборок PostgreSQL, оптимизированных для работы с платформой «1С:Предприятие» (от компании 1С или Postgres Professional). Данный модуль отвечает за оперативный сбор и актуализацию статистики по временным таблицам, которые платформа 1С активно создает в процессе выполнения запросов.
Выясним основные причины, приводящие к ошибке загрузки библиотеки:
apt upgrade или установке дополнительных утилит из базовых репозиториев Ubuntu/Debian оптимизированные исполняемые файлы и библиотеки PostgreSQL заменяются стандартными сборками, в составе которых файл online_analyze.so отсутствует.lsb_release -cs пытаются запросить несуществующую кодовую ветку и возвращают ошибку 404 Not Found. В результате часть пакетов (в частности, расширения) не устанавливается вовсе.postgresql.service в Debian-подобных системах является мета-сервисом. Его статус active (exited) означает лишь то, что управляющий сценарий успешно отработал, но сам экземпляр базы данных при этом может быть остановлен из-за критической ошибки.Если сервер боевой и требуется срочно возобновить доступ пользователей к базам 1С, выполним временное отключение вызова проблемной библиотеки в конфигурации PostgreSQL.
sudo nano /etc/postgresql/9.6/main/postgresql.conf
shared_preload_libraries. По умолчанию для сборок 1С он имеет вид:
shared_preload_libraries = 'online_analyze, plantuner'
online_analyze (или временно закомментируем всю строку символом #).
sudo systemctl restart postgresql@9.6-main
Важно: Это временная мера. Без модуля online_analyze запросы 1С, использующие сложные временные таблицы, могут выполняться со сниженной производительностью.
Разберем ситуацию, когда репозиторий выдает ошибку 404 Not Found при попытке обновить или доустановить нужные пакеты. Если используется не-LTS дистрибутив, необходимо явно указать кодовое имя ближайшего LTS-релиза в конфигурации APT.
sudo nano /etc/apt/sources.list.d/postgrespro-1c.list
xenial для старых сборок или актуальный LTS) и ограничим архитектуру 64-битной системой, чтобы избежать ошибок с 32-битными пакетами i386:
deb [arch=amd64] http://1c.postgrespro.ru/deb/ xenial main
sudo apt-get update
sudo apt-get install --reinstall postgresql-pro-1c-9.6 postgresql-pro-1c-9.6-contrib
ls -la /usr/lib/postgresql/9.6/lib/ | grep online_analyze
Если файл online_analyze.so присутствует в каталоге, вернем параметр shared_preload_libraries в файле postgresql.conf в исходное состояние и перезапустим СУБД.Чтобы в будущем системный менеджер пакетов не заменял адаптированные под 1С библиотеки на ванильные версии из стандартных репозиториев Ubuntu, зафиксируем установленные пакеты от автоматического обновления:
sudo apt-mark hold postgresql-9.6 postgresql-client-9.6 postgresql-contrib-9.6
Для сборок от Postgres Professional команда выглядит аналогично:
sudo apt-mark hold postgresql-pro-1c-9.6 postgresql-pro-1c-9.6-contrib
Для контроля работы экземпляров СУБД в среде Linux рекомендуется использовать специализированные утилиты вместо прямого вызова service postgresql status:
pg_lsclusters
В выводе команды рабочий кластер должен иметь статус online на порту 5432.
sudo pg_ctlcluster 9.6 main restart
sudo pg_ctlcluster 9.6 main status
Для обеспечения максимальной стабильности промышленного сервера «1С:Предприятие» всегда выбирайте дистрибутивы с длительным сроком поддержки (LTS) и фиксируйте версии пакетов СУБД.