📝 Задания — Продолжение работы со скриптами

К оглавлению урока

⚡ 4 задачи из лекции

  1. Мониторинг диска — если >70% → найти большие файлы
  2. Системный отчёт — ОС, uptime, нагрузка, процессы, пользователи
  3. Cron-бекап — воскресенье 2:00, хранить не более 3 копий
  4. Мониторинг логов — grep -E -r ошибки + uniq -c

Экспресс-опрос

  1. Для чего нужны циклы в скрипте?
  2. Какими способами можно запускать скрипты?

Задача 1 — Мониторинг дискового пространства

Создать скрипт, который будет мониторить занятое дисковое пространство. Если место заканчивается, а именно в корневом разделе файловой системы занято больше 70%, то найти самые большие директории и файлы.

Подсказки

  • Используйте df / для получения информации о диске
  • 5-я колонка вывода (Use%) содержит процент использования
  • Уберите % с помощью sed 's/%//'
  • Сравните числа через [ "$disk_usage" -gt "$threshold" ]

→ Посмотреть решение

Задача 2 — Системный отчёт

Создать скрипт, который будет готовить отчёт о системе: версия операционной системы, дата и время, время работы, загруженность системы, занятое дисковое пространство, топ процессы по использованию памяти, количество процессов, количество пользователей.

Подсказки

  • Версия ОС: cat /etc/os-release | grep "PRETTY_NAME" | cut -d '"' -f 2
  • Время работы: uptime -p
  • Нагрузка: uptime | awk -F'[a-z]:' '{ print $2 }'
  • Топ процессов: ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 6
  • Пользователи: who | wc -l

→ Посмотреть решение

Задача 3 — Cron-бекап

Создать задание, которое будет раз в неделю (каждую неделю в воскресенье в 2 часа ночи) бекапить /opt и /home/ec2-user директории, создавая архивы. Настроить скрипт так, чтобы он хранил не более 3 копий архивов с бекапами.

Подсказки

  • Расписание cron: 0 2 * * 0 (минута=0, час=2, день недели=0=воскресенье)
  • Имя архива включает дату: $(date +%Y-%m-%d)
  • Удаление старых: find "$backup_location" -maxdepth 1 -type f -name "*.tar.gz" -mtime +21 -delete

→ Посмотреть решение

Задача 4 — Мониторинг логов

Создать скрипт, который будет проверять на ошибки в логах в директории /var/log и готовить отчёт об их количестве и самых частых ошибках. Добавить шаблон для поиска ошибок как переменную: искать error Error ERROR WARNING и прочие похожие сочетания.

Подсказки

  • Шаблон: error_patterns="(error|Error|ERROR|warning|Warning|WARNING)"
  • Рекурсивный поиск: grep -E -r "$error_patterns" "$log_directory"
  • Подсчёт уникальных: sort | uniq -c | sort -nr

→ Посмотреть решение