Определяем версию платформы 1С:Предприятие в Linux

· 9 мин

Содержание

Самый быстрый способ узнать версию 1С на Linux — посмотреть имя каталога установки: выполните ls -1 /opt/1cv8/x86_64/, и номер вроде 8.3.24.1548 в выводе — это и есть версия платформы 1С:Предприятие на сервере. Если нужен не просто номер, а версия именно работающего сервера, кластера или клиента, ниже разобраны пять способов под разные ситуации.

Версия платформы на Linux не лежит в одном файле с подписью «версия». Она видна сразу в нескольких местах: в пути установки, в именах пакетов, в запущенных процессах кластера, в юните службы и в окне Конфигуратора. Выбирайте способ по тому доступу, который у вас есть: только терминал по ssh, права root или обычного пользователя, сервер с графическим окружением или headless-машина без графики.

Имя каталога установки — это и есть номер версии

Платформа из официальных deb/rpm-пакетов ставится в каталог /opt/1cv8/<архитектура>/<версия>/. Архитектура — чаще всего x86_64, реже i386 или arm64.

ls -1 /opt/1cv8/x86_64/

Вывод — одна или несколько строк:

8.3.21.1890
8.3.24.1548

Каждая папка — отдельная установленная версия. Если их несколько, на сервере параллельно стоят разные релизы: обычная ситуация при поэтапном обновлении, когда новую версию поставили, а старую не удалили ради быстрого отката.

Полезно понимать, что означает сам номер. Он состоит из четырёх групп, например 8.3.24.1548. Первые две (8.3) — линейка платформы, её же называют редакцией. Полный номер из четырёх групп — это конкретный релиз: третья группа меняется от версии к версии, последняя — номер сборки. Когда в требованиях к конфигурации пишут «платформа не ниже 8.3.21», сравнивают именно полный номер целиком, слева направо по группам.

Чтобы не угадывать архитектуру, подставьте маску — она покроет и x86_64, и arm64:

ls -1 -d /opt/1cv8/*/*/

Внутри версионной папки лежат все бинарники платформы: 1cv8, 1cv8c, ragent, rmngr, rphost, ras, rac. Их наличие подтверждает, что это полноценная установка сервера , а не только клиент.

Папок несколько, а какая работает на самом деле — покажет способ с процессами кластера ниже. Установленная версия и запущенная версия могут не совпадать.

Если каталог /opt/1cv8 пуст, платформу ставили вручную из архива tar.gz — тогда она может лежать, например, в /opt/1C/v8.3/x86_64/. Найти её по ключевому бинарнику:

find / -name ragent -type f 2>/dev/null

Точная версия в именах пакетов dpkg и rpm

Если платформу ставили из пакетов, менеджер пакетов знает её версию без всякого поиска по каталогам.

Для Debian и Ubuntu:

dpkg -l | grep 1c-enterprise

Строки будут такого вида:

ii  1c-enterprise-8.3.24.1548-common  8.3.24.1548-...  amd64
ii  1c-enterprise-8.3.24.1548-server  8.3.24.1548-...  amd64

Номер версии входит и в имя пакета, и в столбец версии справа. Суффикс говорит о компоненте: -common — общие файлы, -server — сервер приложений, -client — толстый клиент, -ws — модуль веб-сервера. На сервере приложений обычно стоят -common и -server.

Способ через пакеты надёжен ещё и потому, что показывает не только версию, но и состояние установки. Префикс ii в начале строки dpkg -l означает, что пакет установлен корректно и полностью. Любой другой префикс (rc, iU и подобные) — сигнал, что установка или удаление прошли не до конца, и это объясняет странности вроде «версия в каталоге есть, а служба не стартует».

Для RHEL, CentOS, Альт и других rpm-дистрибутивов:

rpm -qa | grep -i 1c-enterprise

Фильтруйте именно по 1c-enterprise. Короткий grep 1c зацепит посторонние пакеты — драйверы ключей защиты, шрифты, вспомогательные библиотеки — и запутает вывод.

Версия работающего сервера и кластера

Каталог и пакеты показывают, что установлено. А что реально обслуживает кластер прямо сейчас, видно по запущенному процессу. Главный процесс сервера — агент ragent, рядом работают менеджер кластера rmngr и рабочие процессы rphost.

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

Путь к бинарнику в командной строке процесса и содержит версию:

usr1cv8  1234  1  0 ... /opt/1cv8/x86_64/8.3.24.1548/ragent -daemon ...

Чище и без лишних строк — прочитать ссылку на исполняемый файл агента напрямую из /proc:

readlink -f /proc/$(pgrep -nx ragent)/exe

Результат — /opt/1cv8/x86_64/8.3.24.1548/ragent. Это бинарник именно той версии, что держит кластер в данный момент.

Рабочие процессы rphost и менеджер rmngr запускаются тем же агентом из той же папки, поэтому их версия всегда совпадает с версией ragent — проверять их отдельно смысла нет. Если в выводе ps путь у rphost вдруг отличается от пути у ragent, это признак недавнего обновления, когда часть процессов ещё не перезапустилась под новой версией.

Теперь про утилиты администрирования, о которых часто спрашивают отдельно. ras — это сервер администрирования (демон), а rac — консольный клиент, который к нему подключается. Обе утилиты лежат в той же версионной папке, поэтому их путь — тоже надёжный источник версии:

ps -ef | grep '[r]as'

Проверить, что кластер поднят и отвечает, а заодно увидеть его идентификатор:

rac cluster list

Команда вернёт UUID кластера, хост и порт (rac по умолчанию обращается к ras на порту 1545). Сам номер версии она не печатает — версию берите из пути к ragent или ras. Если не помните синтаксис, откройте встроенную справку командой rac help, а не угадывайте параметры.

Останавливать службу 1С или перезапускать сервер, чтобы «просто посмотреть версию», не нужно. Все команды выше только читают состояние системы и не трогают активные сеансы. Перезапуск оборвал бы работу всех подключённых пользователей — для определения версии это лишний риск.

Версия из службы systemd и журнала запуска

Сервер приложений регистрируется в systemd как служба. Точное имя юнита зависит от версии пакета, поэтому сначала найдите его, а не вводите имя наугад:

systemctl list-units --type=service | grep -i srv1c

Дальше посмотрите статус найденной службы. В строке загрузки юнита и в поле ExecStart виден полный путь к ragent с номером версии:

systemctl status 'srv1cv8*'

То же самое даёт журнал службы — первые записи при старте содержат команду запуска с версией в пути:

journalctl -u <имя-юнита> | head

Отдельно стоит проверить, что служба не просто прописана, а именно активна — строка Active: active (running) в выводе systemctl status. Бывает, что после обновления в системе остаётся старый юнит от предыдущей версии в состоянии inactive или failed, и путь в нём ведёт на уже удалённую папку. Ориентируйтесь на запущенный юнит, а не на первый попавшийся.

Этот способ хорош тем, что ExecStart указывает ровно на тот бинарник, который systemd запускает при старте сервера. Если на машине установлено несколько релизов, именно здесь видно, какой из них выбран службой. Технологический журнал платформы версию в явном виде не содержит и по умолчанию выключен, поэтому для определения версии он не нужен — достаточно юнита службы и процесса.

Запуск бинарника и тонкий клиент из терминала

Этот способ подойдёт, если на машине есть графическое окружение. Запустите толстый клиент или Конфигуратор напрямую из версионной папки:

/opt/1cv8/x86_64/8.3.24.1548/1cv8

Откроется стартовое окно 1С:Предприятия; полный номер версии показан в заголовке окна и в пункте «О программе». Тонкий клиент запускается тем же способом — это соседний бинарник 1cv8c в той же папке.

На headless-сервере без графики запускать GUI не нужно и бессмысленно: окно просто не откроется. В этом случае версию уже дал путь к бинарнику из предыдущих разделов — через каталог, пакет или процесс. Отдельный консольный «показ версии» на сервере приложений заменяет чтение пути к ragent, и это надёжнее любого запуска.

Версия клиента в окне «О программе»

Если вы подключаетесь к серверной базе через клиента — с любой машины, в том числе с Windows к базе на Linux-сервере — версию покажет само приложение. В интерфейсе «Такси» откройте главное меню (кнопка со стрелкой в правом верхнем углу) и перейдите в раздел Справка → О программе. Строка вида 1С:Предприятие 8.3 (8.3.24.1548) — это версия клиента, которым вы вошли.

В Конфигураторе то же самое: меню Справка → О программе показывает версию платформы, под которой он запущен.

Удалённо, без входа в базу, пригодится утилита rac — её можно запустить с машины администратора и подключиться к ras на сервере. Версию сервера она напрямую не покажет, но по доступности кластера и по пути к ras на той машине вы поймёте, с каким релизом имеете дело. Для серверов без графики это основной рабочий инструмент: толстый клиент там обычно не ставят вовсе.

Важная оговорка: версия клиента и версия сервера — разные вещи и могут не совпадать. Клиент подключается к серверной базе, только если его номер версии не ниже того, что разрешает кластер. Поэтому номер в окне «О программе» — это версия вашего клиента, а не обязательно версия сервера; версию сервера смотрите по процессу ragent. Там же, в Конфигураторе, виден режим совместимости конфигурации, но это характеристика прикладного решения, а не платформы — не путайте их.

Скрипт для проверки версии на нескольких серверах

Когда серверов много, обходить каждый вручную утомительно. Простой скрипт печатает и установленные версии, и ту, что работает прямо сейчас:

#!/bin/bash
echo "== Установленные версии =="
ls -1 -d /opt/1cv8/*/*/ 2>/dev/null | awk -F/ '{print $(NF-1)}'

echo "== Работает сейчас =="
pid=$(pgrep -nx ragent)
if [ -n "$pid" ]; then
  readlink -f /proc/"$pid"/exe | awk -F/ '{print $(NF-1)}'
else
  echo "ragent не запущен"
fi

В первом блоке awk вырезает из пути предпоследнее поле — имя версионной папки. Во втором блоке скрипт берёт PID последнего запущенного ragent и читает его реальный путь, так что в вывод попадёт именно работающая версия, а не просто установленная. Если агент не запущен, вы увидите об этом прямое сообщение, а не пустую строку.

Для обхода парка серверов заверните проверку в цикл по ssh — скрипту на каждой машине достаточно одной команды:

for h in srv1 srv2 srv3; do
  echo "--- $h ---"
  ssh "$h" 'ls -1 /opt/1cv8/x86_64/'
done

Чтобы быстро выбрать подходящий способ под свою ситуацию, сверьтесь с деревом:

Какой способ выбрать под вашу ситуацию?

Для мониторинга и cron удобнее один источник правды — путь к работающему ragent. Он не соврёт, даже если на машине установлено несколько релизов про запас.

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

Чем версия сервера отличается от версии клиента?
Это два разных номера. Версию сервера даёт путь к процессу ragent, версию клиента — окно Справка → О программе в самом приложении. Клиент подключается к серверной базе, только если его версия не ниже разрешённой кластером.
Можно ли узнать версию, не останавливая кластер?
Да. Просмотр каталога, пакетов, процессов и статуса службы — операции только на чтение. Они не обрывают сеансы и не требуют остановки или перезапуска сервера.
Установлено несколько версий — какая из них используется?
Та, чей ragent виден в списке процессов и в ExecStart службы. Остальные папки — установленные, но неактивные релизы, их обычно держат для быстрого отката.
Каталог `/opt/1cv8` пуст, где искать платформу?
Скорее всего, её ставили вручную из архива в другой каталог. Найдите бинарник командой find / -name ragent -type f 2>/dev/null или определите путь по запущенному процессу.
Как понять разрядность — 32 или 64 бита?
По имени папки архитектуры: x86_64 — 64 бита, i386 — 32 бита. Либо проверьте сам бинарник командой file /opt/1cv8/x86_64/8.3.24.1548/ragent.