Развертывание системы «1С:Предприятие» в связке с ОС Ubuntu, СУБД PostgresPro и веб-сервером Apache — это популярное решение, которое, однако, таит в себе множество нюансов. Часто системные администраторы сталкиваются с парадоксальной ситуацией: клиентские приложения отказываются запускаться или «виснут», если на самом сервере не открыт сеанс Конфигуратора или Предприятия. Рассмотрим подробно причины этого явления и разберем по шагам, как привести систему в рабочее состояние.
Первым делом проанализируем ситуацию с лицензиями. В клиент-серверном варианте работы (когда используется SQL-база, например PostgresPro) наличие серверной лицензии является обязательным условием. Распространенное заблуждение заключается в том, что при работе через веб-сервер достаточно только клиентских лицензий. Это не так.
Разберем, как распределяются роли в этой схеме:
В рассматриваемом случае проблема частично решилась приобретением лицензии «Сервер-МИНИ» на 5 подключений. Без нее сервер 1С на Linux может работать нестабильно или требовать постоянного «прогрева» сессии через графический интерфейс, что мы и наблюдали при запуске Конфигуратора.
Если после установки лицензии веб-клиент продолжает виснуть, нам необходимо заглянуть «под капот» системы. Проанализируем логи менеджера кластера. Для этого в Linux используем стандартные инструменты терминала. Обратите внимание на ошибки Software licensing error.
Рассмотрим пример команды для мониторинга ошибок в реальном времени:
tail -f /var/1cv8/log/rmngr_XXXX/YYYYMMDD.log | grep err
Если вы видите сообщения типа Maximum number of users per software license file is exceeded или Software license file does not support running 1C:Enterprise server, это сигнализирует о том, что:
Проверим содержимое файла публикации default.vrd. В нем должен быть правильно настроен параметр hasp. Если вы хотите, чтобы лицензии раздавал сервер 1С (что предпочтительно для клиент-сервера), убедитесь, что настройки не конфликтуют.
Одной из самых серьезных проблем в данной ситуации является объем оперативной памяти. Рассмотрим конфигурацию: 2 ГБ ОЗУ и 2 ГБ swap. Для современного сервера 1С и SQL-сервера на одной машине — это критически мало. Выясним, почему это приводит к зависаниям веб-клиента.
Когда вы запускаете Конфигуратор на сервере через Xrdp, вы принудительно инициализируете рабочие процессы rphost. Система выделяет под них память и удерживает её. Когда же пытается подключиться веб-клиент «на холодную», серверу 1С нужно породить новый поток или процесс, на что у ОС просто не хватает ресурсов, и процесс уходит в глубокий своп или блокируется механизмом OOM Killer в Linux.
Проанализируем ошибку: «Превышен максимальный расход памяти сервера за один вызов». Это прямое следствие нехватки физической памяти. В настройках рабочего сервера 1С есть параметр Безопасный расход памяти за один вызов.
Рассмотрим, как это исправить программно, хотя лучшим решением будет добавление ОЗУ:
Часто веб-клиент «висит» из-за того, что модуль Apache (работающий от пользователя www-data) не имеет доступа к программным лицензиям 1С, которые лежат в папке /var/1C/licenses и принадлежат пользователю usr1cv8.
Выполним проверку прав доступа. Рассмотрим типичную структуру каталогов:
# Проверка владельца папки с лицензиями
ls -l /var/1C/licenses
# Если владельцем не является группа, в которую входит www-data, могут быть проблемы
Чтобы решить проблему доступа, рекомендуется добавить пользователя веб-сервера в группу grp1cv8 или установить права на чтение файлов лицензий для всех пользователей:
chmod 644 /var/1C/licenses/*.lic
chmod 755 /var/1C/licenses
Подводя итог, можно сказать, что «нормальная» работа 1С в таких условиях невозможна без соблюдения трех факторов:
srv1cv8 и удалить содержимое папки reg_1541/snacc... (но будьте осторожны, не удалите файлы настроек самого кластера).Если вы выполнили все настройки, но веб-клиент все еще виснет, попробуйте опубликовать базу заново, убедившись, что в пути к базе в default.vrd указан правильный адрес сервера 1С, а не локальный путь к файлам (так как у вас клиент-серверный вариант).