Как перевести сервер 1С:Предприятия на Linux на новую версию платформы и не потерять кластер
Содержание
Обновление платформы
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/1cv8 | tar 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. Новая служба, запущенная с тем же каталогом, подхватит его целиком.
Что стоит сделать на этом шаге:
- Сравните параметры старой и новой службы. Если вы меняли порты (
1540,1541, диапазон1560:1591), каталог данных или пользователя, перенесите эти настройки в юнит новой версии черезsudo systemctl edit. - Очистите кеш сервера — папки
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. Подробная проверка — в разделе ниже.
Веб-сервер и клиенты после обновления платформы
Публикации в 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, чтобы стартер выбирал подходящую установленную версию.
Проверка и настройка сервера после обновления
Служба запустилась — это ещё не значит, что всё работает. Пройдите проверки по порядку.
- Кластер виден. Через
rac:
/opt/1cv8/x86_64/${NEW}/rac cluster list
/opt/1cv8/x86_64/${NEW}/rac infobase summary list --cluster=<uuid-кластера>
Список баз должен совпасть с тем, что был до обновления.
- Рабочие процессы стартуют. Откройте любую базу и проверьте, что появился процесс
rphost:ps aux | grep rphost. - База открывается и проводит документы. Зайдите в тестовую или наименее важную базу, проведите документ, сформируйте отчёт.
- Регламентные задания идут. В консоли администрирования или через
rac session listпроверьте, что появились фоновые сеансы. - Лицензии получены.
rac session list --licensesпокажет, откуда сеансы берут лицензию. Программные лицензии из/var/1C/licensesобновление не затрагивает. Для аппаратного ключа проверьте, что драйверaksusbdработает. - В журнале нет ошибок.
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 вместе с платформой?
Как узнать, какая версия сервера сейчас запущена?
systemctl list-units | grep srv1cv8 — номер версии есть в имени службы. Ещё один способ — путь к исполняемому файлу в ps aux | grep ragent.