Подробный гайд по установке и запуску 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.
Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.