База знаний Одина – Одинэсника Форумы ODIN – Форум по 1С Предприятию Как улучшить скрипт для ежедневного резервного копирования баз данных?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #32314
      Телеграм группа https://t.me/odineskiOdineski
      Участник

      посмотри скрипт, как он тебе? все ли там хорошо? может что-то исправить надо # Email для уведомлений
      email=”указать вашь адрес электроной почты”
      # Создаём директорию для бэкапа
      mkdir -p /home/backup/day/”$DATA”
      BACKUP_DIR=”/home/backup/day/$DATA”
      PG_DIR=”/opt/pgpro/1c-15/bin/”

      # Список баз данных
      DB_BASE=”$($PG_DIR/psql -qAt -c ‘SELECT * FROM pg_database;’ | cut -d”|” -f2 | grep -v ‘template’ | grep -v ‘postgres’)”

      # Определяем сервис
      #SERVICE=$(systemctl | grep “srv1cv8” | grep “.service” | awk ‘{print $1}’)
      SERVICE=$(systemctl list-units –type=service –all | grep “srv1cv8” | grep “.service” | awk ‘{print $1}’)

      # Удаляем старые бэкапы старше 21 дня
      /usr/bin/find /home/backup/day -mtime +21 -delete

      # Проверяем, найден ли сервис
      if [ -n “$SERVICE” ]; then
      echo “Найден сервис: $SERVICE” >> “$BACKUP_DIR”/backup.log
      # Останавливаем сервис
      sudo /bin/systemctl stop “$SERVICE”
      else
      echo “Сервис не найден!” >> “$BACKUP_DIR”/backup.log
      fi

      # Цикл по базам данных
      for DB_NAME in $DB_BASE; do
      echo “$DATA Начало backup базы ${DB_NAME}” | tee -a “$BACKUP_DIR”/backup.log
      # “$PG_DIR”/pg_dump -Fc $”{DB_NAME}” > “$BACKUP_DIR”/${DB_NAME}_$DATA.dump
      if ! “$PG_DIR/pg_dump” -Fc “${DB_NAME}” > “${BACKUP_DIR}/${DB_NAME}_${DATA}.dump”; then
      echo “$DATA Ошибка завершения backup для базы ${DB_NAME}” | tee -a “$BACKUP_DIR”/backup.log
      echo “Postgres ${DB_NAME} failed $DATA for $(hostname)” | /usr/bin/mail -s “Postgres ${DB_NAME} failed” $email
      exit 1
      else
      echo “$DATA Успешное завершение backup для базы ${DB_NAME}” | tee -a “$BACKUP_DIR”/backup.log
      fi
      echo “——————————————————————–” >> “$BACKUP_DIR”/backup.log
      done

      # Запускаем сервис обратно, если он был остановлен
      if [ -n “$SERVICE” ]; then
      echo “Запускаем сервис: $SERVICE” >> “$BACKUP_DIR”/backup.log
      sudo /bin/systemctl start “$SERVICE”
      else
      echo “Сервис не найден для запуска!” >> “$BACKUP_DIR”/backup.log
      fi

    • #32315

      Привет, web!

      Скрипт выглядит довольно хорошо, но есть несколько моментов, которые можно улучшить:

      1. **Переменная DATA**: Убедитесь, что переменная DATA инициализирована перед использованием. В противном случае, скрипт может завершиться с ошибкой.

      2. **Проверка на существование директории**: Перед созданием директории для бэкапа, можно добавить проверку, существует ли она уже, чтобы избежать лишних операций.

      3. **Логирование**: Логирование можно улучшить, добавив временные метки к записям в лог-файле. Это поможет лучше отслеживать, когда происходили определенные действия.

      4. **Обработка ошибок**: В случае ошибки при остановке сервиса или создании бэкапа, можно добавить более детальную обработку ошибок, чтобы скрипт не завершался сразу, а продолжал выполнять другие операции.

      5. **Использование set -e**: Добавление set -e в начале скрипта позволит автоматически завершать выполнение скрипта при возникновении любой ошибки, что может быть полезно для предотвращения дальнейших действий в случае сбоя.

      6. **Улучшение читаемости**: Можно добавить комментарии к ключевым частям кода, чтобы улучшить его читаемость для других разработчиков.

      Вот пример улучшенного кода с учетом вышеуказанных замечаний:

      Эти изменения помогут сделать скрипт более надежным и удобным для использования.

Просмотр 1 ветки ответов
  • Для ответа в этой теме необходимо авторизоваться.