From 46367e1c4245ba14ffc0578a07c51df7d4cb779c Mon Sep 17 00:00:00 2001 From: Fedorov Alexander Date: Thu, 28 Dec 2023 17:42:38 +0300 Subject: [PATCH] =?utf8?q?=D1=84=D0=B8=D0=BD=D0=B0=D0=BB=D1=8C=D0=BD=D0=B0?= =?utf8?q?=D1=8F=20=D0=B2=D0=B5=D1=80=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- script.md | 40 ++++++++++++++++++ script.sh | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 176 insertions(+) diff --git a/script.md b/script.md index e69de29..034e097 100644 --- a/script.md +++ b/script.md @@ -0,0 +1,40 @@ +Техническое описание работы скрипта + +Этот скрипт представляет собой набор команд для автоматизации определенных операций в операционной системе Linux. Он разработан для выполнения следующих задач: + +Мониторинг системы и алертинг: + +Определение текущей загрузки процессора (CPU). +Определение текущего использования оперативной памяти (RAM). +Определение текущего использования дискового пространства. + +Для мониторинганеобходимо запустить скрипт с флагом -m или --monitoring указав последовательно через пробел 3 числа для CPU, RAM и диска соответственно. Каждое из этих чисел обозначает максимально допустимую загрузку ресурса в процентах. В случае превышения системой пороговых значений утилизации любого ресурса - будет отправлено увдомление с указанием порогового значения и фактически использованного системой в процентах. + +Создание резервной копии: + +Возможность создания резервной копии указанной директории или файла производится при указании флага -b или --backup и указании пути через пробел. Если путь указан, то в той же директории будет создан бэкап. +Если не указан путь, то по умолчанию используется директория /tmp/important_files. Это сделано на случай, если файлов для бэкапирования больше одного - в таком случае их удобнее самостоятельно все поместить в указанную директорию и разом бэкапировать. +Расписание резевного копирования автоматизируется при каждом запуске, для этого не нужного ничего дополнительно настраивать - просто запускаете скрипт. + +Бэкап базы данных: + +Для совершения этой операции необходимо указать флаг -d или --database и параметры через пробел. Происходит подключение к базе данных (PostgreSQL) с использованием предоставленных параметров (IP адрес, логин, пароль, имя базы данных) в указанной последовательности, затем создание бэкапа базы данных и сохранение его в директорию /tmp/important_files. + +Обновление операционной системы и программ доступно при запуске скрипта с флагом -u или --update. +При любых обновлениях перезагрузка сервера минимизирована. + +Логирование: + +Все действия скрипта записываются в файл журнала /var/log/script. + +Для установки необходимо только скачать скрипт на linux машину. + +Для работы скрипта необходимы следующие утилиты: + +awk, cut: Утилиты для обработки текста и извлечения информации из вывода команд. +top: Утилита для мониторинга системы, используемая для получения информации о загрузке CPU. +free: Утилита для отображения информации об использовании оперативной памяти. +df: Утилита для отображения информации о дисковом пространстве. +mkdir: Утилита для создания директорий. +cp: Утилита для копирования файлов и директорий. +pg_dump: Утилита для создания бэкапов баз данных. diff --git a/script.sh b/script.sh index e69de29..0e086fe 100644 --- a/script.sh +++ b/script.sh @@ -0,0 +1,136 @@ +#!/bin/bash + +LOG_FILE="/var/log/script" + +# Проверка существования директории /tmp/important_files и создание, если её нет +if [ ! -d "/tmp/important_files" ]; then + mkdir -p "/tmp/important_files" + echo "Создана директория /tmp/important_files" >> "$LOG_FILE" +fi + +while [[ $# -gt 0 ]]; do + key="$1" + + case $key in + -m|--monitoring) + monitoring=true + cpu_threshold="$2" + ram_threshold="$3" + disk_threshold="$4" + shift + shift + shift + shift + ;; + -b|--backup) + backup=true + backup_path="$2" + shift + shift + ;; + -d|--database) + database_backup=true + db_ip="$2" + db_login="$3" + db_password="$4" + db_name="$5" + shift + shift + shift + shift + shift + ;; + -u|--update) + update=true + shift + ;; + *) + # Неизвестный параметр + echo "Неизвестный параметр: $1" >> "$LOG_FILE" + exit 1 + ;; + esac + shift +done + +if [ "$update" = true ]; then + # Обновление операционной системы и программ + if command -v apt-get &>/dev/null; then + # Для Ubuntu/Debian + apt-get update >> "$LOG_FILE" 2>&1 + apt-get upgrade -y >> "$LOG_FILE" 2>&1 + elif command -v yum &>/dev/null; then + # Для CentOS + yum update -y >> "$LOG_FILE" 2>&1 + else + echo "Не удалось определить способ обновления для данной операционной системы." >> "$LOG_FILE" + exit 1 + fi +fi + +if [ "$backup" = true ]; then + if [ -z "$backup_path" ]; then + # Если не указан путь для бэкапа, используем /tmp/important_files + backup_path="/tmp/important_files" + fi + + # Проверяем существование указанного пути + if [ -e "$backup_path" ]; then + # Создаем резервную копию и добавляем временную метку к имени + backup_file="${backup_path}_backup_$(date +"%Y%m%d_%H%M%S")" + cp -r "$backup_path" "$backup_file" + + echo "Создана резервная копия: $backup_file" >> "$LOG_FILE" + else + echo "Ошибка: Указанный путь не существует." >> "$LOG_FILE" + exit 1 + fi +fi + +if [ "$database_backup" = true ]; then + if [ -z "$db_ip" ] || [ -z "$db_login" ] || [ -z "$db_password" ] || [ -z "$db_name" ]; then + echo "Ошибка: Необходимо указать IP адрес, логин, пароль и имя базы данных для подключения к базе данных." >> "$LOG_FILE" + exit 1 + fi + + # Путь для сохранения бэкапа + db_backup_path="/tmp/important_files/${db_name}_backup_$(date +"%Y%m%d_%H%M%S").sql" + + # Создание бэкапа базы данных + PGPASSWORD="$db_password" pg_dump -h "$db_ip" -U "$db_login" -w -Fc "$db_name" > "$db_backup_path" + + echo "Создан бэкап базы данных PostgreSQL: $db_backup_path" >> "$LOG_FILE" +fi + +if [ "$monitoring" = true ]; then + # Собираем информацию о загрузке CPU + cpu_load=$(top -bn1 | awk '/%Cpu/{print $2}' | cut -d. -f1) + echo "Текущая загрузка CPU: $cpu_load%" >> "$LOG_FILE" + + # Собираем информацию о использовании RAM + ram_usage=$(free | awk '/Mem/{printf("%.2f"), $3/$2*100}') + echo "Текущее использование RAM: $ram_usage%" >> "$LOG_FILE" + + # Собираем информацию о дисковом пространстве + disk_usage=$(df -h / | awk '/\//{print $(NF-1)}' | cut -d% -f1) + echo "Текущее использование дискового пространства: $disk_usage%" >> "$LOG_FILE" + + # Проверяем пороги и выводим предупреждение при необходимости + if [ ! -z "$cpu_threshold" ] && [ "$cpu_load" -gt "$cpu_threshold" ]; then + echo "Предупреждение: Загрузка CPU превышает заданный порог ($cpu_load% > $cpu_threshold%)" + fi + + if [ ! -z "$ram_threshold" ] && [ "$ram_usage" -gt "$ram_threshold" ]; then + echo "Предупреждение: Использование RAM превышает заданный порог ($ram_usage% > $ram_threshold%)" + fi + + if [ ! -z "$disk_threshold" ] && [ "$disk_usage" -gt "$disk_threshold" ]; then + echo "Предупреждение: Использование дискового пространства превышает заданный порог ($disk_usage% > $disk_threshold%)" + fi +else + if [ "$update" != true ] && [ "$backup" != true ] && [ "$database_backup" != true ]; then + echo "Не указаны флаги для выполнения действий (-m, -b, -d, -u)" >> "$LOG_FILE" + exit 1 + fi +fi + -- 2.11.4.GIT