В этой статье описываются практические примеры работы с файловой базой с использованием автономного сервера 1С.
Создание базы
Про автономный сервер я писал в этой статье, а здесь попрактикуемся в работе с ним на примере файловой базы.
Инструкция по автономному серверу есть на сайте ИТС.
Автономный сервер (ibsrv) и утилита для управления им (ibcmd) будут установлены вместе с сервером 1С. Про установку сервера 1С я писал здесь. И так, если у вас уже установлен сервер 1С, то начинаем.
Создадим в своём домашнем каталоге следующие подкаталоги:
- base1/data — для хранения служебных файлов базы;
- base1/db — для хранения файловой базы.
$ mkdir -p base1/data $ mkdir -p base1/db
Перейдем в каталог установленной платформы:
$ cd /opt/1cv8/x86_64/8.3.25.1374/
И с помощью утилиты ibcmd создадим конфиг для базы, который назовём conf.yml:
$ ./ibcmd server config init --name=base1 --base=/base1 --port=8080 --address=192.168.0.25 --db-path='/home/alex/base1/db' > /home/alex/base1/conf.yml
Посмотрим на созданный конфиг:
$ cat /home/alex/base1/conf.yml server: address: 192.168.0.25 port: 8080 database: path: /home/alex/base1/db infobase: id: d4f34069-6731-4c0c-b791-148a4174b6b7 name: base1 distribute-licenses: yes schedule-jobs: allow disable-local-speech-to-text: no http: base: /base1
Разберём его:
- server: — параметры автономного сервера
- address: — адрес сервера
- port: — порт сервера (по нему база будет доступна по протоколу http)
- database: — параметры базы данных
- path: — путь к каталогу, в котором находится файловая база
- infobase: — параметры информационной базы
- id: — идентификатор базы
- name: — имя базы
- distribute-licenses: (yes/ no) — управление раздачей лицензий
- schedule-jobs: (deny / allow) — управление регламентными заданиями
- disable-local-speech-to-text: (yes / ne) — управление распознаванием речи
- http: — параметры публикации базы на встроенном веб сервере
- base: — имя публикации базы на встроенном веб сервере
При запуске автономного сервера необходимо указать каталог служебных файлов и конфиг. Запустим:
$ ./ibsrv --data='/home/alex/base1/data' --config /home/alex/base1/conf.yml
Так как мы запустили сервер в обычном режиме, то мы можем выключить его нажав Ctrl+C.
Создание службы SystemD
Для удобства мы можем сделать службу SystemD, с помощью которой будем включать и выключать автономный сервер . Теорию написания юнитов для служб SystemD я описывал — здесь.
И так, создадим файл службы:
$ sudo nano /etc/systemd/system/1c-base1.service [Unit] Description=Standalone server 1C for base1 Requires=network.target [Service] ExecStart=/opt/1cv8/x86_64/8.3.25.1374/ibsrv --daemon --data='/home/alex/base1/data' --config /home/alex/base1/conf.yml Type=forking User=alex Group=alex Restart=on-failure RestartSec=1 [Install] DefaultInstance=default WantedBy=multi-user.target
После создания службы применим изменения и запустим службу:
$ sudo systemctl daemon-reload $ sudo systemctl start 1c-base1.service
Затем, посмотрим её статус:
$ sudo systemctl status 1c-base1.service ● 1c-base1.service - Standalone server 1C for base1 Loaded: loaded (/etc/systemd/system/1c-base1.service; disabled; preset: enabled) Active: active (running) since Wed 2024-09-11 11:32:21 MSK; 17min ago Process: 31624 ExecStart=/opt/1cv8/x86_64/8.3.25.1374/ibsrv --daemon --data=/home/alex/base1/data --config /home/alex/base1/conf.yml (code=exited, status=0/SUCCESS) Main PID: 31625 (ibsrv) Tasks: 203 (limit: 4644) Memory: 326.5M CPU: 9.963s CGroup: /system.slice/1c-base1.service ├─31625 /opt/1cv8/x86_64/8.3.25.1374/ibsrv └─31729 /opt/1cv8/x86_64/8.3.25.1374/jre/bin/java
Как видим, запускается процесс автономного сервера ibsrv и java.
Теперь, если нам нужно что-то поменять, например выключить регламентные задания, то просто редактируем конфиг ( в моём случае — /home/alex/base1/conf.yml) и перезапускаем службу.
Доступ к базе по http
Для проверки подключимся к базе с помощью тонкого клиента (у вас должна быть клиентская лицензия 1С).
При добавлении базы, говорим что она у нас располагается на веб-сервере:
Вот скриншот запущенной базы:
Доступ к базе по tcp
При запуске автономного сервера, по умолчанию, он слушает стандартные порты: 1541 и 1560:1591 для доступа по tcp. Поэтому мы можем подключиться к автономному серверу указав расположение базы на сервере:
Дальше можем подключаться хоть клиентом, хоть конфигуратором:
Изменение диапазона портов
Чтобы изменить диапазон портов, нужно поправить параметры запуска автономного сервера. К сожалению в конфиг это прописать пока нельзя. Отредактируем службу SystemD добавив в параметр запуска следующие опции --direct-regport=1641
и --direct-range=1660:1691
.
$ sudo nano /etc/systemd/system/1c-base1.service [Unit] Description=Standalone server 1C for base1 Requires=network.target [Service] ExecStart=/opt/1cv8/x86_64/8.3.25.1374/ibsrv --daemon --data='/home/alex/base1/data' --config /home/alex/base1/conf.yml --direct-regport=1641 --direct-range=1660:1691 Type=forking User=alex Group=alex Restart=on-failure RestartSec=1 [Install] DefaultInstance=default WantedBy=multi-user.target
Применим изменения, перезапустим службу и посмотрим какие порты слушает наш сервер:
$ sudo systemctl daemon-reload $ sudo systemctl restart 1c-base1.service $ sudo ss -t4lpn | grep ibsrv LISTEN 0 4096 192.168.0.25:8080 0.0.0.0:* users:(("ibsrv",pid=1454,fd=63)) LISTEN 0 128 0.0.0.0:1660 0.0.0.0:* users:(("ibsrv",pid=1454,fd=72)) LISTEN 0 128 0.0.0.0:1661 0.0.0.0:* users:(("ibsrv",pid=1454,fd=308)) LISTEN 0 128 0.0.0.0:1641 0.0.0.0:* users:(("ibsrv",pid=1454,fd=60))
Теперь, чтобы подключиться по tcp нужно явно указать порт — 1641:
Вот скриншот запущенной базы:
Загрузка и выгрузка архива
Для загрузки и выгрузки архива (dt) вы можете использовать конфигуратор или утилиту ibcmd. Но для этой операции, перед использованием утилиты ibcmd нужно выключать экземпляр автономного сервера.
Загрузка с помощью ibcmd
Выключим службу:
$ sudo systemctl stop 1c-base1.service
Загрузим архив:
$ ./ibcmd infobase restore --config /home/alex/base1/conf.yml --data="/home/alex/base1/data" /home/alex/base1/1Cv8new.dt
Включим службу:
$ sudo systemctl start 1c-base1.service
Выгрузка с помощью ibcmd
Выключим службу:
$ sudo systemctl stop 1c-base1.service
Выгрузим архив:
$ ./ibcmd infobase dump --config /home/alex/base1/conf.yml --data="/home/alex/base1/data" /home/alex/base1/1C-archive.dt
Включим службу:
$ sudo systemctl start 1c-base1.service
Работа с сессиями с помощью ibcmd
Для того, чтобы посмотреть список сессий, подключенных к базе, необходимо знать PID сервера. Его можно узнать посмотрев на статус службы:
$ systemctl status 1c-base1.service | grep PID Main PID: 2341 (ibsrv)
Теперь можем посмотреть список сессий:
$ ./ibcmd --pid=2341 session list
Каждая сессия имеет множество параметров, значения которых выводятся. Я не показываю вывод так как он слишком большой.
Чтобы завершить сессию нужно смотреть на параметр сессии session. Вот пример завершения сессии:
$ ./ibcmd --pid=2341 session terminate --session=09141b18-92d2-4a97-8e5e-3640974aa423
Остальные мои статьи по серверам 1С доступны здесь.
Если понравилась статья, подпишись на мой канал в VK.