#!/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