Добавить 'add_1c-db.sh'

скрипт по добавлению базы 1С на сервере
This commit is contained in:
administrator
2026-08-17 13:30:22 +03:00
parent 817659cd3e
commit 269fd4d8cb
+114
View File
@@ -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