Задача: Автоматизировать процесс пакетного режима работы конфигуратора 1С на сервере Linux (где есть только консоль).
Проблема: Для запуска конфигуратора в Linux необходимо графическое окружение рабочего стола (X-ы).
Решение: Установить Х-сервер в консоли (рабочим решением оказалось установка виртуально сервера Xvfb).
Исходные данные: Клиент-серверный вариант установки 1С. Клиенты любые, сервер — Linux (в моем случае Debian Jessie).
Почему не режим агента?
1. Это решение я нашел ещё до выхода версии 1С, поддерживающей режим агента конфигуратора.
2. На данный момент в режиме агента есть ограниченный набор команд. В моем случае можно использовать все команды пакетного режима конфигуратора.
Теперь по шагам
Наткнулся на обсуждение моей проблемы вот тут http://www.forum.mista.ru/topic.php?id=782091.
Предлагается установить X-сервер и запускать скрипт с помощью xinit.
# apt-get install xinit
Запуск скрипта с помощью следующей команды (не забывайте, что используются обратные кавычки):
# xinit `which <скрипт>`
Где <скрипт> — это пакет команд запуска 1С-конфигуратора.
Работает. Но есть особенность.
С полноценными X-ами не получилось.
Т.к. запускаю 1С на виртуальном хостинге VDS (xen), то в системе отсутствует по-умолчанию устройство /dev/fb0, которое требуется при запуске xinit.
Его можно добавить, если в dom0 добавить в конфиг виртуальный framebuffer.
Но хостер не пошёл на контакт по этому вопросу.
В итоге нашёл вот такое решение (установка виртуального X-сервера Xvfb).
# apt-get install xvfb
Для запуска 1С в консоли так же потребуется GTK-библиотека, поэтому:
# apt-get install libwebkitgtk-1.0-0:i386
Примечание: работает на jessie. На wheezy есть неразрешимые зависимости.
Важно (долго мучился): при запуске 1С из командной строки в режиме конфигуратора вылетала ошибка Segmentation Fault.
Решение оказалось в установке шрифтов микрософт (не спрашивайте, как до этого дошёл, в интернете нет прямой информации на это):
# apt-get install ttf-mscorefonts-installer
Ещё вариант ошибки и способ решения.
При запуске из консоли процесс запускается, но не заканчивается (висит). В логах ничего нет.
Для того, чтобы разобраться с проблемой пришлось установить графическое окружение (в частности LXDE).
В итоге увидел, что 1С не запускался. Висело окошко с ошибкой "Не удалось инициализировать компоненту frame".
Считаем "frame" библиотекой frame.so из комплекта 1С.
Проверяем какие библиотеки подгружаются при запуски frame.so:
# ldd /opt/1C/v8.3/i386/frame.so | grep not
Среди вывалившегося списка библиотек основные входят в комплект 1С.
Каждый файл можно найти и посмотреть где он лежит с использованием команды:
# locate <имя библиотеки>
В моем случае не была найдена библиотека libGL.so.1.
Выяснилось, что ранее были установлены драйвера ATI Radeon, которые не были удалены.
Удалил их и все встало на свои места.
# apt-get purge fglrx.*
После этого можно использовать команду вида:
# xvfb-run <скрипт>
Как я это использую
Скрипт настроен на Подключение к хранилищу — Обновление конфигурации из хранилища — Обновление конфигурации базы данных.
Спасибо, возьму на заметку!