При работе с серверными решениями на базе Linux, особенно в таких конфигурациях, как СППР (Система проектирования прикладных решений) или ГитКонвертер, мы часто сталкиваемся с необходимостью запуска конфигуратора в пакетном режиме непосредственно из кода приложения. Основная проблема заключается в том, что даже для работы в фоновом режиме конфигуратор 1С требует наличия графической подсистемы (X-сервера), которая обычно отсутствует на серверных дистрибутивах вроде Astra Linux. При развертывании таких систем может быть полезен сценарий python для автоматизации процессов установки СУБД и сервера 1С в среде Astra Linux 1.8.
Рассмотрим подробно, почему это происходит и как правильно настроить окружение, чтобы сервер 1С мог самостоятельно инициировать запуск конфигуратора без ошибок, связанных с переменной DISPLAY.
Проанализируем ситуацию: пользователь может успешно запустить команду вручную после выполнения export DISPLAY=:99, но при вызове из кода 1С (на стороне сервера) команда «падает». Это происходит потому, что служба srv1cv8 запускается через systemd. В отличие от интерактивной сессии SSH, системные службы не считывают файлы /etc/profile, .bashrc или /etc/environment.d в том виде, в котором мы к этому привыкли.
Следовательно, переменная DISPLAY просто не попадает в контекст процесса rphost, который пытается породить новый процесс конфигуратора. Разберем по шагам, как это исправить, что особенно важно при реализации концепции защищенной IT инфраструктуры на базе Astra Linux и PostgresSQL.
Это самый «чистый» способ с точки зрения системного администрирования. Мы внесем изменения непосредственно в описание службы 1С, чтобы переменная окружения была доступна всем процессам сервера.
srv1cv8-8.3.23.1865.service). Рекомендуется использовать команду systemctl edit, чтобы не затереть изменения при обновлении платформы:
sudo systemctl edit srv1cv8-8.3.x.x
[Service] добавим строку, определяющую дисплей:
[Service]
Environment="DISPLAY=:99"
sudo systemctl daemon-reload
sudo systemctl restart srv1cv8-8.3.x.x
В некоторых случаях (например, в СППР) путь к бинарному файлу может быть определен динамически или мы не хотим глобально менять окружение сервера. Тогда мы можем прибегнуть к подмене исполняемого файла 1С скриптом-оберткой. Посмотрим на пример реализации.
/opt/1cv8/x86_64/8.3.XX.XXXX/.1cv8 в 1cv8.real.1cv8 со следующим содержанием:
#!/bin/bash
export DISPLAY=:99
# Можно также использовать xvfb-run для автоматического управления сервером
/opt/1cv8/x86_64/8.3.XX.XXXX/1cv8.real "$@"
chmod +x 1cv8.Проанализируем этот метод: теперь при любом обращении к 1cv8 система сначала установит переменную DISPLAY, а затем передаст все аргументы ($@) реальному бинарному файлу. Это гарантирует работу конфигуратора в пакетном режиме, даже если вызывающий код ничего не знает об X-сервере.
Для того чтобы переменная DISPLAY=:99 имела смысл, в системе должен быть запущен виртуальный X-сервер. Выясним, как его правильно настроить, учитывая особенности настройки Astra Linux с установкой зависимостей.
Рассмотрим пример создания службы для Xvfb, чтобы он запускался автоматически при старте системы:
[Unit]
Description=Virtual Framebuffer Service
After=network.target
[Service]
ExecStart=/usr/bin/Xvfb :99 -screen 0 1024x768x24 -ac +extension GLX +render -noreset
User=usr1cv8
Group=grp1cv8
[Install]
WantedBy=multi-user.target
Обратите внимание, что запуск Xvfb от имени пользователя usr1cv8 (под которым работает сервер 1С) упрощает управление правами доступа к сокетам в каталоге /tmp/.X11-unix/.
Даже при наличии настроенного DISPLAY, конфигуратор может не запуститься, если в системе отсутствуют графические библиотеки. В минимальных установках Astra Linux (режим сервера) их часто нет. Разберем список обязательных компонентов:
Начиная с современных версий платформы 8.3, для некоторых операций пакетного режима был введен ключ -nographics. Посмотрим, как он может помочь. Если мы самостоятельно формируем строку запуска, добавление этого ключа снижает требования к графической подсистеме. Однако в прикладных конфигурациях, таких как СППР, строка запуска формируется внутренним кодом, и добавить туда этот параметр без изменения конфигурации невозможно. Именно поэтому методы с systemd или скриптом-оберткой остаются наиболее универсальными.
Мы рассмотрели несколько способов решения проблемы запуска конфигуратора 1С в Linux без GUI. Подведем итог: наиболее надежным решением является сочетание постоянно запущенного Xvfb и прописывание переменной DISPLAY в системном unit-файле. Это позволяет успешно реализовать такие задачи, как установка комьюнити-лицензии на сервер 1С без графического интерфейса или построение полноценного CI/CD для 1С, чтобы упростить себе жизнь и автоматизировать рутинные процессы — для этого подойдет интеграция СППР с GitLab для автоматизации сборок.