1С и Linux
Пишу для себя, чтобы не забыть как делал. 95 % рабочее. На комментарии отвечаю, когда увижу.
пятница, 4 октября 2019 г.
Установка и настройка нескольких версий 1С 8.3 для одновременной работы на одном сервере одним пользователем
Установка с нуля (ранее 1с не был установлен на стандартных портах)
$ mkdir ~/test
$ cd ~/test
$ ls
deb64_8_3_15_1656.tar.gz
$ mkdir -p /tmp/1ctmp
$ cd /tmp/1ctmp
$ cp /home/user/test/deb64_8_3_15_1656.tar.gz /tmp/1ctmp
$ tar xvzf deb64_8_3_15_1656.tar.gz
$ mkdir /tmp/1ctmp/tmp
$ dpkg-deb -x 1c-enterprise83-common_8.3.15-1656_amd64.deb /tmp/1ctmp/tmp
$ dpkg-deb -x 1c-enterprise83-server_8.3.15-1656_amd64.deb /tmp/1ctmp/tmp
$ sudo mkdir /opt/1C
$ sudo mv tmp/opt/1C/v8.3/ /opt/1C/v8.3.15.1656/
$ sudo groupadd grp1cv8
$ sudo useradd -g grp1cv8 -m -d /home/usr1cv8 usr1cv8
$ sudo chown -R usr1cv8:grp1cv8 /opt/1C
#$ sudo echo -e «pass\npass\n» | sudo passwd usr1cv8
#$ sudo usermod -aG sudo usr1cv8
$ sudo apt install imagemagick -y
$ sudo apt install libfreetype6 libgsf-1-common unixodbc glib2.0
#ubuntu
$ sudo apt install -y xfonts-utils cabextract
$ sudo apt install ttf-mscorefonts-installer -y
#$ sudo dpkg -i fonts-ttf-ms_1.0-eter4ubuntu_all.deb
$ sudo fc-cache -fv
$ sudo apt install -y libc6-i386
$ cd ~/test
$ wget http://download.etersoft.ru/pub/Etersoft/HASP/last/x86_64/Ubuntu/18.04/haspd-modules_7.90-eter2ubuntu_amd64.deb
$ wget http://download.etersoft.ru/pub/Etersoft/HASP/last/x86_64/Ubuntu/18.04/haspd_7.90-eter2ubuntu_amd64.deb
$ sudo dpkg -i *.deb
#$ sudo apt-get install -f -y
$ sudo service haspd start
$ sudo service haspd status
#$ sudo reboot
$ sudo nano /etc/systemd/system/srv1cv83-15.1656.service
#
# srv1cv83-15.1656.service
#
[Unit]
Description=1C:Enterprise Server
Wants=network.target
After=network.target
[Service]
#MemoryAccounting=true
#MemoryLimit=15G
Type=simple
Environment=LANG=ru_RU.UTF-8
Environment=TZ=Europe/Moscow
Environment=PORT=1540
Environment=REGPORT=1541
Environment=RANGE=1560:1690
Environment=DATADIR=/home/usr1cv8/.v8.3.15.1656/1C/1Cv83
PrivateTmp=yes
ExecStart=/opt/1C/v8.3.15.1656/x86_64/ragent -d $DATADIR -port $PORT -regport $REGPORT -range $RANGE
# -seclev 0 -debug
Restart=always
RestartSec=3
User=usr1cv8
$ sudo systemctl daemon — reload # запускать после изменений файла
$ sudo systemctl start srv1cv83-15.1656.service
$ sudo systemctl status srv1cv83-15.1656.service
$ sudo systemctl enable srv1cv83-15.1656.service
#
#$ sudo systemctl stop srv1cv83-15.1656.service
#$ sudo systemctl restart srv1cv83-15.1656.service
#$ sudo systemctl status srv1cv83-15.1656.service
$ sudo systemctl status srv1cv83-15.1656.service
$ ss -tlnp | grep :15
LISTEN 0 128 *:1560 *:*
LISTEN 0 128 *:1540 *:*
LISTEN 0 128 *:1541 *:*
LISTEN 0 128 . 1560 . *
LISTEN 0 128 . 1540 . *
LISTEN 0 128 . 1541 . *
Для программной лицензии (прявязанной к hasp)
в /var/1C/licenses
Положить лицензию
$ sudo mv 20190207114003.lic /var/1C/licenses
Запуск службы сервера администрирования RAS
$ sudo nano /etc/systemd/system/srv1cv83-15.1656-ras.service
[Unit]
Description=1C:Enterprise Remote Administration Service
After=network.target remote-fs.target nss-lookup.target
Requires=srv1cv83-15.1656.service
[Service]
Type=simple
ExecStart=/opt/1C/v8.3.15.1656/x86_64/ras cluster localhost:1540 —port=1545
KillSignal=SIGINT
PrivateTmp=true
Restart=on-failure
RestartSec=5
User=usr1cv8
Group=grp1cv8
#$ sudo systemctl daemon-reload
$ sudo systemctl start srv1cv83-15.1656-ras.service
$ sudo systemctl status srv1cv83-15.1656-ras.service
$ sudo systemctl enable srv1cv83-15.1656-ras.service
$ systemctl list-unit-files | grep srv1cv83
srv1cv83-15.1656-ras.service enabled
srv1cv83-15.1656.service enabled
Удаление сервиса
$ sudo systemctl stop srv1cv83-15.1656-ras.service
$ sudo systemctl disable srv1cv83-15.1656-ras.service
$ sudo rm /etc/systemd/system/srv1cv83-15.1656-ras.service
$ sudo systemctl daemon-reload
$ sudo systemctl reset-failed
Установка дополнительной 8.3.15.1656
~/test$ ls
deb64_8_3_15_1656.tar.gz
$ mkdir -p /tmp/1ctmp
$ cd /tmp/1ctmp
$ cp /home/user/test/deb64_8_3_15_1656.tar.gz /tmp/1ctmp
$ tar xvzf deb64_8_3_15_1656.tar.gz
$ mkdir /tmp/1ctmp/tmp
$ dpkg-deb -x 1c-enterprise83-common_8.3.15-1656_amd64.deb tmp
$ dpkg-deb -x 1c-enterprise83-server_8.3.15-1656_amd64.deb tmp
$ sudo mv tmp/opt/1C/v8.3/ /opt/1C/v8.3.15.1656/
$ sudo nano /etc/systemd/system/srv1cv83-15.1656.service
#
# srv1cv83-15.1656.service
#
[Unit]
Description=1C:Enterprise Server
Wants=network.target
After=network.target
[Service]
#MemoryAccounting=true
#MemoryLimit=15G
Type=simple
Environment=LANG=ru_RU.UTF-8
Environment=TZ=Europe/Moscow
Environment=PORT=1740
Environment=REGPORT=1741
Environment=RANGE=1760:1890
Environment=DATADIR=/home/usr1cv8/.v8.3.15.1656/1C/1Cv83
PrivateTmp=yes
ExecStart=/opt/1C/v8.3.15.1656/x86_64/ragent -d $DATADIR -port $PORT -regport $REGPORT -range $RANGE
# -seclev 0 -debug
Restart=always
RestartSec=3
User=usr1cv8
$ sudo systemctl daemon — reload # запускать после изменений файла
$ sudo systemctl start srv1cv83-15.1656.service
$ sudo systemctl status srv1cv83-15.1656.service
$ sudo systemctl enable srv1cv83-15.1656.service
#
$ sudo systemctl stop srv1cv83-15.1656.service
$ sudo systemctl restart srv1cv83-15.1656.service
$ sudo systemctl status srv1cv83-15.1656.service
Если хочется при этом отказаться от оригинального скрипта:$ sudo systemctl disable srv1cv83 # отключить автоматический запуск
$ sudo systemctl mask srv1cv83 # запретить запуск вообще
Удаление сервиса
$ sudo systemctl stop srv1cv83-15.1656.service
$ sudo systemctl disable srv1cv83-15.1656.service
$ sudo rm /etc/systemd/system/srv1cv83-15.1656.service
$ sudo systemctl daemon-reload
$ sudo systemctl reset-failed
Запуск службы сервера администрирования RAS
$ sudo nano /etc/systemd/system/srv1cv83-15.1656-ras.service
[Unit]
Description=1C:Enterprise Remote Administration Service
After=network.target remote-fs.target nss-lookup.target
Requires=srv1cv83-15.1656.service
[Service]
Type=simple
ExecStart=/opt/1C/v8.3.15.1656/x86_64/ras cluster localhost:1740 —port=1745
KillSignal=SIGINT
PrivateTmp=true
Restart=on-failure
RestartSec=5
User=usr1cv8
Group=grp1cv8
#$ sudo systemctl daemon-reload
$ sudo systemctl enable srv1cv83-15.1656-ras.service
$ sudo systemctl start srv1cv83-15.1656-ras.service
$ sudo systemctl status srv1cv83-15.1656-ras.service
$ systemctl list-unit-files | grep srv1cv83
srv1cv83-15.1656-ras.service enabled
srv1cv83-15.1656.service enabled
sudo systemctl stop [servicename]
sudo systemctl disable [servicename]
sudo rm /etc/systemd/system/[servicename]
sudo rm /etc/systemd/system/[servicename] symlinks that might be related
sudo systemctl daemon-reload
sudo systemctl reset-failed
$ sudo systemctl restart srv1cv83-15.1656-ras.service
$ sudo systemctl status srv1cv83-15.1656-ras.service
$ sudo su — usr1cv8 -c «/opt/1C/v8.3.15.1656/x86_64/rac cluster localhost:1545 list»
$ sudo systemctl restart srv1cv83-15.1565-ras.service
$ sudo systemctl status srv1cv83-15.1565-ras.service
$ sudo su — usr1cv8 -c «/opt/1C/v8.3.15.1565/x86_64/rac cluster localhost:1745 list»
$ sudo nano /etc/systemd/system/srv1cv83-15.1565-ras.service
Пример исправления сервиса selhoz-8.3.15.1830.service
sudo systemctl status selhoz-8.3.15.1830.service
sudo systemctl stop selhoz-8.3.15.1830.service
sudo systemctl disable selhoz-8.3.15.1830.service
sudo nano /etc/systemd/system/selhoz-8.3.15.1830.service
исправить порты в на всякий случай в двух местах.
sudo systemctl daemon-reload
sudo systemctl enable selhoz-8.3.15.1830.service
sudo systemctl start selhoz-8.3.15.1830.service
sudo systemctl status selhoz-8.3.15.1830.service
artbear / readme.md
Весь нижеследующий материал излагается с расчетом на то, что читатель как минимум заглядывал в Клиент-серверный вариант. Руководство администратора. В данном руководстве даже есть глава «4.3. Обеспечение совместной работы нескольких серверных процессов», в которой в свою очередь есть раздел 4.3.3. Для ОС Linux, однако, он не дает ответа на вопрос, обозначенный в заголовке статьи.
Теперь к сути! Специфика пакетных менеджеров, используемых в GNU/Linux для установки (обновления) программного обеспечения, такова, что зачастую отсутсвует возможность установить две разные версии одного и того же пакета. Так дело обстоит и с пакетами технологической платформы 1С Предприятия — устанавливая новую версию (новый релиз), происходит обновление (замена) пакета предыдущей версии.
Для специалистов, долгое время работавших с MS Windows, такое положение дел выглядит непривычным (необычным, непонятным, . ). Т.к. бывает удобно, когда у тебя одновременно установленно два (а может больше, ведь кто удаляет старые версии платформы?! 😉 ) разных релиза платформы и ты можешь быстро «переключиться» между ними, либо запустить одновременно несколько серверов 1С Предприятия разных релизов.
В GNU/Linux «напрямую» такая возможность отсутствует, что конечно печалит некоторых коллег. Посему, постараюсь показать, что в решении данной задачи нет ничего сложного, НО . Да — это «костыль» .
Для решения обозначенной задачи нам надо определиться со следующими моментами: а. На каких сетевых портах будут работать компоненты кластера 1С Предприятия (ragent, rmngr и rphost) каждого из экземпляров; б. Место размещения каталога кластера каждого из экземпляров.
Дабы внести некую определенность, будем отталкиваться от следующих вводных:
- Используемые релизы платформы 8.3.13.1644 и 8.3.13.1809 (могут быть любые другие). В нашем случае принципиально только то, что оба релиза версии 8.3, ибо одновременно установить версии 8.2 и 8.3 не составляет проблем;
- Каталоги кластеров располагаются в /home/1C/first и /home/1C/second, соответственно;
- Компоненты кластера работают на следующих сетевых портах: релиз 8.3.13.1809 на 1540,1541,1560-1590; релиз 8.3.13.1644 на 2540,2541,2560-2590;
- Речь пойдет о x64-платформе, установленной на CentOS, но предлагаемый сценарий легко перенести на любой другой дистрибутив с некоторыми исправлениями.
ВАЖНО: Ответственность за любые последствия, возникшие в результате внесения изменений в работающую систему по материалам данной статьи, лежат исключительно на лице, внесшим данные изменения!
- Подготовка окружения
- Устанавливаем пакеты платформы релиза 8.3.13.1644 обычным способом;
- Останавливаем, если запущен, сервер 1С Предприятия;
- Копируем файл /etc/sysconfig/srv1cv83 в файл /etc/sysconfig/srv1cv83131644;
- Копируем файл /etc/init.d/srv1cv83 в файл /etc/init.d/srv1cv83131644 (в нашем случае важно, чтобы имена новых файлов из п. 2 и п. 3 совпадали);
- Рекурсивно копируем каталог /opt/1C/v8.3/x86_64/ в каталог /opt/1C/v8.3.13.1644/x86_64/;
- Устанавливаем обычным образом пакеты релиза 8.3.13.1809;
- В файле /etc/sysconfig/srv1cv83131644 меняем следующие параметры:
SRV1CV8_PORT=2540 SRV1CV8_REGPORT=2541 SRV1CV8_RANGE=2560:2591 SRV1CV8_DATA=/home/1C/second 8. В файле /etc/init.d/srv1cv83131644 меняем следующие строки:
[ -z «$SRV1CV8_PIDFILE» ] && SRV1CV8_PIDFILE=»/var/run/srv1cv$$$$.pid» 9. В файле /etc/sysconfig/srv1cv83 меняем следующие строки:
SRV1CV8_DATA=/home/1C/first 10. Создаем каталоги /home/1C/first и /home/1C/second; 11. Устанавливаем владельцем на каталог /home/1C с подкаталогами пользователя usr1cv8 (man 1 chown в помощь).
Чтобы сервис для релиза 8.3.13.1644 запускался самостоятельно при загрузке системы необходимо выполнить команду:
$ sudo systemctl enable srv1cv83131644 Для запуска сервисов выполняем последовательно:
$ sudo systemctl start srv1cv83 $ sudo systemctl start srv1cv83131644 После чего необходимо убедиться, что необходимые сервисы запустились и работают. Для этого можно прибегнуть к командам ps и/или pgrep (man 1 ps и man 1 pgrep в помощь), или к класическому service status .
ВАЖНО: С помощью административной консоли (или ras/rac) требуется создать (проверить наличие) кластеров на каждом экземпляре сервера 1С Предприятия!
Мы получили два сервиса: srv1cv83 для запуска сервера 1С Предприятия релиза 8.3.13.1809 и srv1cv83.13.1644 для запуска сервера 1С Предприятия релиза 8.3.13.1644 (файлы запуска /etc/init.d/srv1cv83 и /etc/init.d/srv1cv83131644 соответственно).
Получили два конфигурационных файла для сервера 1С Предприятия: /etc/sysconfig/srv1cv83131644 — для релиза 8.3.13.1644 и /etc/sysconfig/srv1cv83 — для релиза 8.3.13.1809.
Получили два каталога кластера 1С Предприятия: /home/1C/second — для релиза 8.3.13.1644 и /home/1C/first — для релиза 8.3.13.1809.
Для чего все это было надо? Думаю, каждый сам ответит для себя на этот вопрос 😉
P.S. Есть конструктивная критика? Всегда рад услышать!