From 269fd4d8cbbb3bc22ebdc717830569fa72f10dc6 Mon Sep 17 00:00:00 2001 From: administrator Date: Mon, 17 Aug 2026 13:30:22 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20'add=5F1c-db.sh'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit скрипт по добавлению базы 1С на сервере --- add_1c-db.sh | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 add_1c-db.sh diff --git a/add_1c-db.sh b/add_1c-db.sh new file mode 100644 index 0000000..4295a05 --- /dev/null +++ b/add_1c-db.sh @@ -0,0 +1,114 @@ +#!/bin/bash + +# Включаем трассировку (вывод каждой команды перед ее выполнением) для максимальной отладки +#set -x + +BASE_DIR="/opt/1cv8/x86_64" +SYM_LINK="${BASE_DIR}/current" + +echo "=== DEBUG: Starting environment checks ===" +echo "Current user: $(whoami)" + +LATEST_VERSION=$(ls -d ${BASE_DIR}/8.* 2>/dev/null | sort -V | tail -n 1) +# Очищаем от возможных скрытых символов возврата каретки \r +LATEST_VERSION=$(echo "$LATEST_VERSION" | tr -d '\r') + +if [ -z "$LATEST_VERSION" ]; then + echo "Ошибка: В каталоге ${BASE_DIR} не найдено установленных версий 1С (папок вида 8.x.x.x)." + exit 1 +fi + +echo "=== DEBUG: Latest version found: $LATEST_VERSION ===" + +if [ ! -L "$SYM_LINK" ] || [ "$(readlink -f "$SYM_LINK" | tr -d '\r')" != "$LATEST_VERSION" ]; then + echo "Предупреждение: Ссылка 'current' отсутствует или указывает на старую версию." + echo "Обновление ссылки 'current' -> $LATEST_VERSION..." + + ln -sfn "$LATEST_VERSION" "$SYM_LINK" + + if [ $? -eq 0 ]; then + echo "Ссылка 'current' успешно обновлена." + if systemctl is-active --quiet ras-current.service; then + echo "Перезапуск службы ras-current для применения новой версии..." + systemctl restart ras-current.service + fi + else + echo "Ошибка: Не удалось обновить символьную ссылку. Запустите скрипт через sudo." + exit 1 + fi +else + echo "Отлично: Ссылка 'current' уже актуальна." +fi + +# Проверяем, существует ли физически утилита rac по ссылке current +RAC_PATH="${SYM_LINK}/rac" +RAC_PATH=$(echo "$RAC_PATH" | tr -d '\r') + +echo "=== DEBUG: Checking RAC path: $RAC_PATH ===" +if [ ! -f "$RAC_PATH" ]; then + echo "КРИТИЧЕСКАЯ ОШИБКА: Файл $RAC_PATH не найден на диске!" + ls -la "$SYM_LINK" + exit 1 +fi + +if [ ! -x "$RAC_PATH" ]; then + echo "КРИТИЧЕСКАЯ ОШИБКА: Файл $RAC_PATH найден, но у него нет прав на выполнение!" + chmod +x "$RAC_PATH" +fi + +CLUSTER_ID=$($RAC_PATH cluster list 2>/dev/null | grep cluster | head -n 1 | awk '{print $3}') +CLUSTER_ID=$(echo "$CLUSTER_ID" | tr -d '\r') + +if [ -z "$CLUSTER_ID" ]; then + echo "Ошибка: Не удалось связаться с утилитой rac или найти запущенный кластер." + echo "Проверяем статус службы ras-current напрямую:" + systemctl status ras-current.service + exit 1 +fi + +echo "=== DEBUG: Connected to cluster UUID: $CLUSTER_ID ===" + +DB_NAME=$1 +DB_PASSWORD=$2 + +# Очищаем параметры от скрытых переносов +DB_NAME=$(echo "$DB_NAME" | tr -d '\r') +DB_PASSWORD=$(echo "$DB_PASSWORD" | tr -d '\r') + +if [ -z "$DB_NAME" ]; then + set +x # Отключаем отладку на время ввода, чтобы не светить текст на экране + read -p "Введите имя базы данных (для 1С и pgsql): " DB_NAME + set -x + DB_NAME=$(echo "$DB_NAME" | tr -d '\r') + if [ -z "$DB_NAME" ]; then + echo "Ошибка: Имя базы не может быть пустым." + exit 1 + fi +fi + +if [ -z "$DB_PASSWORD" ]; then + set +x # Отключаем отладку, чтобы пароль не напечатался в логах терминала + read -s -p "Введите пароль пользователя СУБД (postgres): " DB_PASSWORD + echo "" + set -x + DB_PASSWORD=$(echo "$DB_PASSWORD" | tr -d '\r') + if [ -z "$DB_PASSWORD" ]; then + echo "Ошибка: Пароль не может быть пустым." + exit 1 + fi +fi + +echo "Имя базы данных: $DB_NAME" +echo "Запуск создания базы данных $DB_NAME..." + +# Полностью убираем переменную из начала строки для теста и вызываем напрямую через жесткий путь к current +/opt/1cv8/x86_64/current/rac infobase create --cluster="$CLUSTER_ID" --name="$DB_NAME" --dbms=PostgreSQL --db-server="10.2.0.2" --db-name="$DB_NAME" --db-user="postgres" --db-pwd="$DB_PASSWORD" --locale=ru_RU --create-database --license-distribution=allow + +if [ $? -eq 0 ]; then + echo "Успех! База данных '$DB_NAME' успешно создана в 1С и PostgreSQL." +else + echo "Ошибка при создании базы. Проверьте правильность пароля СУБД и логи 1С." +fi + +# Отключаем режим трассировки в конце работы +#set +x \ No newline at end of file