Подробный гайд по установке и запуску 1С:Предприятие 8.3 в Fedora Linux - Часть 2

Подробный гайд по установке и запуску 1С:Предприятие 8.3 в Fedora Linux. Настройка зависимостей, скрипты диагностики ошибок и решение проблем с библиотеками в терминале.

2026.10.02                  


Подробный гайд по установке и запуску 1С:Предприятие 8.3 в Fedora Linux - Часть 2Подробный гайд по установке и запуску 1С:Предприятие 8.3 в Fedora Linux - Часть 2

5. Скрипт запуска 1С с выводом ошибок в терминал и лог

Создайте файл:

nano ~/bin/1c-run

Вставьте:

#!/usr/bin/env bash
set -o pipefail

STRICT=0
if [[ "${1:-}" == "--strict" ]]; then
  STRICT=1
  shift
fi

REQUEST="${ONEC_BIN:-1cv8}"
BIN=""

if [[ -x "$REQUEST" ]]; then
  BIN="$REQUEST"
elif command -v "$REQUEST" >/dev/null 2>&1; then
  BIN=$(command -v "$REQUEST")
else
  SEARCH_NAME=$(basename "$REQUEST")
  BIN=$(find /opt/1cv8/x86_64 -maxdepth 2 -type f -name "$SEARCH_NAME" 2>/dev/null | sort -V | tail -n 1)
fi

if [[ -z "$BIN" ]]; then
  echo "ERROR: Cannot find 1C binary (request: $REQUEST)."
  echo "Set ONEC_BIN=/path/to/1cv8 or install 1C client RPM."
  exit 1
fi

DIR=$(dirname "$BIN")
export LD_LIBRARY_PATH="$DIR:${LD_LIBRARY_PATH:-}"

export LANG="${LANG:-ru_RU.UTF-8}"
export LC_ALL="${LC_ALL:-ru_RU.UTF-8}"

# Подробный вывод GLib/GTK-сообщений
export G_MESSAGES_DEBUG="${G_MESSAGES_DEBUG:-all}"

# Если есть проблемы с Wayland/GPU, раскомментируйте:
# export GDK_BACKEND=x11
# export LIBGL_ALWAYS_SOFTWARE=1
# export WEBKIT_DISABLE_COMPOSITING=1

if [[ "$STRICT" -eq 1 ]]; then
  # Более строгая проверка символов при старте
  export LD_BIND_NOW=1
fi

ARGS=("$@")
SAFE_ARGS=()
prev=""

for a in "${ARGS[@]}"; do
  if [[ "$prev" == "/P" || "$prev" == "/UC" ]]; then
    SAFE_ARGS+=("*****")
  else
    case "$a" in
      /P*)
        SAFE_ARGS+=("/P*****")
        ;;
      /UC*)
        SAFE_ARGS+=("/UC*****")
        ;;
      *)
        SAFE_ARGS+=("$a")
        ;;
    esac
  fi
  prev="$a"
done

LOG="$HOME/1c-terminal-$(date +%Y%m%d-%H%M%S).log"

{
  echo "Time: $(date)"
  echo "Binary: $BIN"
  echo "Args: ${SAFE_ARGS[*]}"
  echo "Strict: $STRICT"
  echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH"
  echo "LANG=$LANG LC_ALL=$LC_ALL"
  echo "----------------------------------------"
} | tee "$LOG"

"$BIN" "$@" 2>&1 | tee -a "$LOG"
EXIT_CODE=${PIPESTATUS[0]}

echo "----------------------------------------" | tee -a "$LOG"
echo "Exit code: $EXIT_CODE" | tee -a "$LOG"
echo "Full log: $LOG"

exit "$EXIT_CODE"


Сделайте исполняемым:

chmod +x ~/bin/1c-run

6. Как запускать 1С через этот скрипт

6.1. Просто запуск клиента

~/bin/1c-run

6.2. Запуск конфигуратора/дизайнера

~/bin/1c-run DESIGNER

6.3. Запуск предприятия без указания базы

~/bin/1c-run ENTERPRISE

6.4. Файловая база

Если база лежит, например, в /home/user/1c/Base:

~/bin/1c-run ENTERPRISE /F'/home/user/1c/Base'

Не используйте ~ внутри кавычек для 1С: лучше указывать полный путь.

6.5. Серверная база

Пример:

~/bin/1c-run ENTERPRISE /S'server\ref' /N'user' /P'password'

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

6.6. Тонкий клиент

ONEC_BIN=1cv8c ~/bin/1c-run ENTERPRISE

6.7. Конкретная версия 1С

ONEC_BIN=/opt/1cv8/x86_64/8.3.24.xxxx/1cv8 ~/bin/1c-run ENTERPRISE

6.8. Строгий режим диагностики

~/bin/1c-run --strict ENTERPRISE

--strict выставляет LD_BIND_NOW=1, чтобы часть проблем с символами проявилась раньше. Если без --strict работает, а с ним падает — это может быть связано с ленивой подгрузкой библиотек/плагинов.


7. Если нужно запустить 1С и видеть только ошибки в реальном времени

Скрипт всё равно пишет полный лог.

Но можно дополнительно фильтровать:

~/bin/1c-run ENTERPRISE | grep --line-buffered -Ei 'error|fail|cannot|not found|denied|webkit|gtk'

Полный лог всё равно сохранится в файл вида:

~/1c-terminal-YYYYMMDD-HHMMSS.log

Посмотреть последние записи:

tail -n 100 ~/1c-terminal-*.log

Или следить в реальном времени:

tail -f ~/1c-terminal-*.log

8. Как понять, какую библиотеку требует 1С

8.1. Ошибка в стиле

error while loading shared libraries: libfoo.so.1: cannot open shared object file: No such file or directory


Алгоритм:

1. Копируете имя библиотеки, например libfoo.so.1.

2. Ищете пакет:

dnf provides '*/libfoo.so.1'

3. Ставите найденный пакет:

sudo dnf install package-name

4. Проверяете:

ldconfig -p | grep libfoo.so.1

5. Запускаете снова:

~/bin/1c-run ENTERPRISE

8.2. Если библиотека уже установлена, но не находится

Проверьте, где файл:

rpm -ql package-name | grep libfoo.so.1

Проверьте кэш линковщика:

ldconfig -p | grep libfoo

Если файл есть, но кэш старый:

sudo ldconfig

Если библиотека установлена в нестандартный каталог, временно добавьте путь:

export LD_LIBRARY_PATH=/path/to/dir:$LD_LIBRARY_PATH

Но для постоянной работы лучше использовать корректную установку пакета или ld.so.conf.

8.3. Если ошибка не в имени библиотеки, а в версии символа

Например:

symbol xyz version FOO_1.2 not defined in file libfoo.so

Это уже ABI-несовместимость.

Варианты:

  • поставить пакет нужной версии из официального репозитория;
  • обновить 1С до версии, совместимой с вашей Fedora;
  • использовать контейнер/distrobox/ВМ с поддерживаемым дистрибутивом;
  • не делать случайных симлинков между разными версиями библиотек.

9. Углублённая диагностика: что 1С пытается открыть/подключить прямо сейчас

Если ldd ничего не показывает, но 1С падает или зависает, используйте strace.

9.1. Запуск под strace

Найдите бинарник:

BIN=$(find /opt/1cv8/x86_64 -type f -name 1cv8 | sort -V | tail -n 1)
echo "$BIN"

Запуск под strace:

strace -f -tt -o ~/1c-strace.log -e trace=openat,stat,access,connect "$BIN" ENTERPRISE

Смотрим ошибки доступа/отсутствия файлов:

grep -E 'ENOENT|EACCES|EPERM' ~/1c-strace.log | tail -n 100

Смотрим сетевые подключения:

grep -E 'connect' ~/1c-strace.log | tail -n 50

9.2. Подключиться к уже запущенному процессу

Найдите процессы:

pgrep -laf 1cv8

Подключитесь к нужному PID:

sudo strace -f -p PID -e trace=%file,%network

Где PID — номер процесса.

9.3. Посмотреть открытые файлы процесса

sudo lsof -p PID

9.4. Посмотреть загруженные библиотеки процесса

cat /proc/PID/maps | awk '{print $6}' | grep '\.so' | sort -u

9.5. Посмотреть переменные окружения процесса

tr '\0' '\n' < /proc/PID/environ

9.6. Посмотреть, куда процесс пытается подключиться

ss -tnp | grep -E '1cv8|1541|1560'

Для чужих процессов может понадобиться sudo.


Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.


Статью подготовил: Аверко Денис Сергеевич @Nymexis г. Омск (специалист по ЗИ)

Комментарии

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