Как перевести сервер 1С:Предприятия на Linux на новую версию платформы и не потерять кластер

· 10 мин

Содержание

Обновление платформы 1С на Linux — это установка новой версии рядом со старой, а не замена файлов. Новый релиз ложится в отдельный каталог /opt/1cv8/x86_64/8.3.xx.yyyy, после чего вы останавливаете службу старой версии, регистрируете службу новой и запускаете её с тем же каталогом данных кластера. Базы, список кластера и настройки рабочих процессов при этом сохраняются.

Вся процедура на одном сервере занимает 20–40 минут. Главные риски — забыть про веб-сервер, клиентов другой версии и кеш сервера. Ниже порядок, который подходит для платформы 8.3.20 и новее с единым установщиком .run, с пометками для старых deb/rpm-пакетов.

Подготовка Linux-сервера к обновлению платформы

Перед установкой ответьте себе на четыре вопроса. Если хотя бы на один ответа нет — обновление лучше отложить.

  • 🧩 Поддерживает ли конфигурация новую платформу. У каждого релиза типовой конфигурации есть минимальная и рекомендуемая версия платформы. Ставить платформу новее рекомендованной можно, но проверяйте на копии базы.
  • 🗄️ Поддерживает ли платформа вашу СУБД. Для PostgreSQL сверьте версию сервера СУБД со списком поддерживаемых в документации к релизу платформы. Сборки PostgreSQL от 1С и Postgres Pro обновляются отдельно.
  • 💻 Какие клиенты подключаются к серверу. Клиент и сервер должны совпадать по версии до номера сборки. Если толстые клиенты стоят на рабочих станциях, их тоже придётся обновить.
  • 🌐 Есть ли публикации на веб-сервере. Модуль Apache привязан к версии платформы, его путь надо будет поменять.

Узнайте текущую версию и имя службы:

ls /opt/1cv8/x86_64/
systemctl list-units --all | grep -i srv1cv8

Скачайте дистрибутив сервера для Linux нужной разрядности (обычно server64_8_3_xx_yyyy.tar.gz) с портала поддержки 1С и положите на сервер, например в /tmp/1c.

Проверьте свободное место: одна версия платформы со всеми компонентами занимает около 1–1,5 ГБ в /opt, плюс место под резервные копии.

Выберите окно, когда в базах никто не работает. Обновление сервера обрывает все сеансы: пользователи потеряют несохранённые документы, фоновые и регламентные задания прервутся. Предупредите людей заранее и заблокируйте вход в базы.

Резервные копии перед обновлением 1С на Linux

Сама установка новой версии базы не трогает. Копии нужны на случай, если после запуска что-то пойдёт не так и придётся откатываться.

Что сохранитьГде лежитЧем
Базы данных PostgreSQLна сервере СУБДpg_dump -Fc по каждой базе
Выгрузка базы средствами 1С—Конфигуратор → Администрирование → Выгрузить информационную базу (.dt)
Реестр кластера и настройки/home/usr1cv8/.1cv8/1C/1cv8tar czf всего каталога
Программные лицензии/var/1C/licensesкопия каталога
Конфиг Apache с публикациями/etc/apache2/ или /etc/httpd/копия файлов конфигурации
Файлы конфигурации платформы/opt/1cv8/confкопия каталога

Пример для каталога кластера и лицензий:

sudo tar czf /backup/1c-srvinfo-$(date +%F).tar.gz /home/usr1cv8/.1cv8
sudo tar czf /backup/1c-licenses-$(date +%F).tar.gz /var/1C/licenses

Архив каталога кластера делайте при остановленной службе — иначе файлы реестра могут попасть в архив в несогласованном виде.

Пример дампа одной базы PostgreSQL:

sudo -u postgres pg_dump -Fc -f /backup/buh_$(date +%F).dump buh

Не удаляйте старую версию платформы до тех пор, пока новая не отработает хотя бы день. Старый каталог в /opt/1cv8/x86_64/ — ваш самый быстрый откат.

Ручная установка или скрипт: выбор способа обновления

Способ зависит от версии платформы и числа серверов.

СпособКогда подходитРиски
Единый установщик .run в графическом режимеодин сервер с рабочим столомдолго, легко пропустить нужный компонент
.run в режиме --mode unattendedсерверы без графики, 8.3.20 и новеекомпоненты надо перечислить явно
Пакеты deb/rpmплатформа до 8.3.20 или сохранившаяся схема пакетовв старых сборках пакеты одной версии заменяли друг друга
Скрипт или Ansibleнесколько серверов, регулярные обновленияошибка в скрипте повторится на всех серверах

Для большинства серверов удобнее тихая установка .run: она ставит новую версию рядом со старой и не трогает работающую службу.

Пошаговое обновление сервера 1С на Linux

Ниже пример перехода с версии 8.3.24.1548 на 8.3.25.1374. Подставьте свои номера — дальше они записаны в переменные, чтобы не ошибиться.

OLD=8.3.24.1548
NEW=8.3.25.1374

Шаг 1. Установить новую версию платформы

Распакуйте архив и запустите установщик от root:

cd /tmp/1c
tar xzf server64_8_3_25_1374.tar.gz
sudo ./setup-full-${NEW}-x86_64.run --mode unattended --enable-components server,ws,server_admin
  • server — сервер 1С:Предприятия;
  • ws — модуль расширения веб-сервера, нужен для публикаций;
  • server_admin — сервер администрирования ras и утилита rac.

Если на этой же машине работают толстый клиент или конфигуратор, добавьте компонент клиента — его точное имя покажет ./setup-full-${NEW}-x86_64.run --help.

После установки появится каталог /opt/1cv8/x86_64/${NEW}. Служба старой версии в это время продолжает работать.

Установщик может потребовать системные библиотеки. Если он остановился с ошибкой зависимостей, доустановите названные пакеты через apt или dnf и запустите его повторно.

Шаг 2. Остановить службу старой версии

С этого момента пользователи отключаются. Убедитесь, что окно согласовано.

sudo systemctl stop srv1cv8-${OLD}@default
sudo systemctl disable srv1cv8-${OLD}@default

Если есть отдельная служба ras, остановите и её. Проверьте, что процессов ragent, rmngr, rphost не осталось:

ps aux | grep -E 'ragent|rmngr|rphost' | grep -v grep

На платформе до 8.3.21 служба управлялась скриптом /etc/init.d/srv1cv83: остановка — sudo systemctl stop srv1cv83 или sudo /etc/init.d/srv1cv83 stop.

Шаг 3. Перенести кластер на новую версию

Отдельно «обновлять кластер» не нужно. Реестр кластера — базы, рабочие серверы, менеджеры, требования назначения функциональности — хранится в каталоге данных, по умолчанию /home/usr1cv8/.1cv8/1C/1cv8. Новая служба, запущенная с тем же каталогом, подхватит его целиком.

Что стоит сделать на этом шаге:

  1. Сравните параметры старой и новой службы. Если вы меняли порты (1540, 1541, диапазон 1560:1591), каталог данных или пользователя, перенесите эти настройки в юнит новой версии через sudo systemctl edit.
  2. Очистите кеш сервера — папки snccntx* в каталоге reg_1541. Это сеансовые данные, они пересоздаются при запуске:
sudo find /home/usr1cv8/.1cv8/1C/1cv8/reg_1541 -maxdepth 1 -type d -name 'snccntx*' -exec rm -rf {} +

Удаляйте только snccntx* и только при остановленной службе. Файл 1CV8Clst.lst и остальное содержимое reg_1541 не трогайте — там список баз кластера.

Шаг 4. Зарегистрировать и запустить службу новой версии

Начиная с 8.3.21 в каталоге версии лежит готовый файл юнита systemd. Его подключают командой systemctl link:

sudo systemctl link /opt/1cv8/x86_64/${NEW}/srv1cv8-${NEW}@.service
sudo systemctl enable srv1cv8-${NEW}@default
sudo systemctl start srv1cv8-${NEW}@default

Если вы пользуетесь сервером администрирования как службой, найдите в том же каталоге файл юнита ras и подключите его так же. Без службы ras можно запустить вручную:

/opt/1cv8/x86_64/${NEW}/ras cluster --daemon

Шаг 5. Убедиться, что служба поднялась

systemctl status srv1cv8-${NEW}@default
ss -tlnp | grep -E ':154[01]'

В статусе должно быть active (running), а порты 1540 и 1541 — слушаться процессами ragent и rmngr. Подробная проверка — в разделе ниже.

Перед тем как пустить пользователей
Выполнено: 0 / 6

Веб-сервер и клиенты после обновления платформы

Публикации в Apache

Модуль wsap24.so лежит в каталоге конкретной версии. В конфигурации Apache путь к нему записан явно, например:

LoadModule _1cws_module "/opt/1cv8/x86_64/8.3.24.1548/wsap24.so"

Замените номер версии на новый во всех местах конфигурации, затем проверьте синтаксис и перезапустите Apache:

sudo grep -rl "${OLD}" /etc/apache2/
sudo sed -i "s/${OLD}/${NEW}/g" /etc/apache2/apache2.conf
sudo apachectl configtest && sudo systemctl restart apache2

На RHEL-подобных системах конфигурация — в /etc/httpd/, служба — httpd. Перезапуск Apache обрывает сеансы веб-клиента и HTTP-сервисов.

Можно и заново опубликовать базу утилитой webinst из каталога новой версии, но замена пути проще и не трогает файлы default.vrd.

Клиенты на рабочих станциях

Тонкий клиент другой сборки к серверу не подключится. Варианты:

  • обновить клиенты вручную или через систему управления парком;
  • разместить дистрибутив клиента в общем каталоге и указать его в настройках запуска — клиенты сами скачают нужную версию при подключении;
  • в списке баз оставить поле версии пустым или указать 8.3, чтобы стартер выбирал подходящую установленную версию.

Проверка и настройка сервера после обновления

Служба запустилась — это ещё не значит, что всё работает. Пройдите проверки по порядку.

  1. Кластер виден. Через rac:
/opt/1cv8/x86_64/${NEW}/rac cluster list
/opt/1cv8/x86_64/${NEW}/rac infobase summary list --cluster=<uuid-кластера>

Список баз должен совпасть с тем, что был до обновления.

  1. Рабочие процессы стартуют. Откройте любую базу и проверьте, что появился процесс rphost: ps aux | grep rphost.
  2. База открывается и проводит документы. Зайдите в тестовую или наименее важную базу, проведите документ, сформируйте отчёт.
  3. Регламентные задания идут. В консоли администрирования или через rac session list проверьте, что появились фоновые сеансы.
  4. Лицензии получены. rac session list --licenses покажет, откуда сеансы берут лицензию. Программные лицензии из /var/1C/licenses обновление не затрагивает. Для аппаратного ключа проверьте, что драйвер aksusbd работает.
  5. В журнале нет ошибок. journalctl -u srv1cv8-${NEW}@default --since "30 min ago".

Если стало медленнее

После смены версии первые запросы к базе идут медленнее: сервер заново строит кеши. Это норма в течение 10–30 минут работы.

Если замедление держится дольше:

  • 🧹 проверьте, что кеш snccntx* действительно очищен;
  • 📊 соберите статистику PostgreSQL: vacuumdb --all --analyze от пользователя postgres в нерабочее время;
  • ⚙️ сравните параметры рабочего сервера (лимиты памяти, число процессов) — при переносе службы они не меняются, но их полезно пересмотреть;
  • 📝 включите технологический журнал через файл logcfg.xml в каталоге /opt/1cv8/conf и посмотрите длительные события. После разбора журнал выключите: он быстро занимает диск.

Ошибки после обновления платформы 1С на Linux

Диагностика: выберите симптом

Как откатиться

Если новая версия не взлетела, откат занимает пару минут — при условии, что старый каталог в /opt вы не удаляли:

sudo systemctl stop srv1cv8-${NEW}@default
sudo systemctl disable srv1cv8-${NEW}@default
sudo systemctl enable --now srv1cv8-${OLD}@default

Затем верните путь к модулю в Apache. Базы при обновлении платформы не конвертируются, поэтому старая версия откроет их как прежде.

Когда новая версия проработала без замечаний, старую удаляют деинсталлятором из её каталога: sudo /opt/1cv8/x86_64/${OLD}/uninstaller-full --mode unattended.

Автоматизация обновления платформы скриптом

Если серверов несколько или вы обновляетесь каждый квартал, сведите шаги в скрипт. Базовый вариант для одного сервера:

#!/bin/bash
set -euo pipefail
OLD="$1"; NEW="$2"; DIST="/tmp/1c/setup-full-${NEW}-x86_64.run"
DATA="/home/usr1cv8/.1cv8/1C/1cv8"

"$DIST" --mode unattended --enable-components server,ws,server_admin

systemctl stop "srv1cv8-${OLD}@default"
systemctl disable "srv1cv8-${OLD}@default"
tar czf "/backup/srvinfo-$(date +%F-%H%M).tar.gz" "$DATA"
find "$DATA/reg_1541" -maxdepth 1 -type d -name 'snccntx*' -exec rm -rf {} +

systemctl link "/opt/1cv8/x86_64/${NEW}/srv1cv8-${NEW}@.service"
systemctl enable --now "srv1cv8-${NEW}@default"

sed -i "s/${OLD}/${NEW}/g" /etc/apache2/apache2.conf
apachectl configtest && systemctl restart apache2
systemctl is-active "srv1cv8-${NEW}@default"

Запуск: sudo ./update1c.sh 8.3.24.1548 8.3.25.1374. Скрипт обрывает сеансы — запускайте его только в согласованное окно, например по таймеру systemd ночью.

Для парка серверов те же шаги переносят в роль Ansible: переменные OLD/NEW в инвентаре, сначала один тестовый сервер, потом остальные.

Добавьте в конец скрипта уведомление в мессенджер или почту с результатом systemctl is-active. Тогда утром не придётся проверять каждый сервер вручную.

Частые вопросы

Можно ли держать на одном Linux-сервере две версии платформы?
Да. Версии ставятся в разные каталоги /opt/1cv8/x86_64/<версия>. Одновременно запускать две службы с одинаковыми портами нельзя: для второй нужны другие порты и свой каталог данных.
Нужно ли обновлять конфигурацию базы после обновления платформы?
Нет, это независимые операции. Но новая конфигурация может требовать платформу не ниже определённого номера — поэтому платформу обычно обновляют раньше.
Сбросятся ли лицензии после обновления платформы?
Программные лицензии привязаны к оборудованию, а не к версии платформы, и лежат в /var/1C/licenses. Обновление их не трогает. Повторная активация нужна при замене оборудования или переустановке системы.
Обязательно ли обновлять PostgreSQL вместе с платформой?
Нет. Обновляйте СУБД, только если текущая версия не входит в список поддерживаемых новым релизом платформы. Обновление PostgreSQL — отдельная работа со своим окном и копиями.
Как узнать, какая версия сервера сейчас запущена?
Выполните systemctl list-units | grep srv1cv8 — номер версии есть в имени службы. Ещё один способ — путь к исполняемому файлу в ps aux | grep ragent.