Введение
В этом проекте вы создадите монитор системы Linux с использованием сценария на shell. Этот сценарий будет непрерывно отслеживать использование ЦПУ, памяти и диска вашей системы, отображая проценты использования в реальном времени. Если использование любого ресурса превысит заранее установленный порог, будет отображено предупреждение. Завершив этот проект, вы научитесь основам программирования на shell в Linux и создадите практический инструмент.

🎯 Задачи
Завершив этот проект, вы:
- Научитесь создавать сценарий на shell для мониторинга системных ресурсов.
- Поймете, как устанавливать и использовать пороговые значения для использования ЦПУ, памяти и диска.
- Создадите функцию для отправки предупреждений при превышении пороговых значений.
🏆 Достижения
После завершения этого проекта вы:
- Сможете создавать и запускать монитор системы Linux с использованием сценария на shell.
- Поймете, как работать с командами для работы с системными ресурсами, такими как
top,freeиdf. - Будете готовы расширять сценарий, добавляя новые функции, например, уведомления по электронной почте.
Настройка проекта
Начните с подготовки чистого рабочего пространства для вашего сценария. Мы рекомендуем использовать WebIDE для этого проекта, так как он подходит для написания и тестирования сценариев.
Перейдите в этот каталог и создайте файл с именем system_monitor.sh:
cd ~/project
touch system_monitor.sh

Откройте файл в вашем любимом текстовом редакторе и добавьте следующие строки:
#!/bin/bash
## Определите пороговые значения для использования ЦПУ, памяти и диска (в процентах)
CPU_THRESHOLD=80
MEMORY_THRESHOLD=80
DISK_THRESHOLD=80
Вот что делает каждая часть кода:
#!/bin/bash: Эта строка указывает, что сценарий будет интерпретироваться с использованием оболочки Bash.CPU_THRESHOLD=80: Устанавливает порог использования ЦПУ на 80%. Вы можете изменить это значение позже.MEMORY_THRESHOLD=80иDISK_THRESHOLD=80: Аналогично, эти строки определяют пороги для использования памяти и диска.
Сохраните файл и сделайте его исполняемым:
chmod +x system_monitor.sh
Добавление функции оповещения
Теперь добавим функцию для отправки оповещений, когда использование ресурсов превышает пороговые значения. Откройте файл system_monitor.sh и добавьте следующий код:
## Функция для отправки оповещения
send_alert() {
echo "$(tput setaf 1)ALERT: $1 usage exceeded threshold! Current value: $2%$(tput sgr0)"
}
Вот разбор этой функции:
send_alert: Функция принимает два аргумента:$1представляет тип ресурса (например, ЦПУ, Память, Диск).$2представляет текущий процент использования.
tput setaf 1: Изменяет цвет текста на красный, чтобы оповещения были хорошо видны.tput sgr0: Возвращает форматирование текста к нормальному после сообщения об оповещении.
Добавьте тестовый вызов функции, чтобы убедиться, что она работает:
send_alert "CPU" 85

Запустите сценарий:
./system_monitor.sh
Вы должны увидеть красное сообщение об оповещении, похожее на следующее:
ALERT: CPU usage exceeded threshold! Current value: 85%
Перед переходом к следующему шагу удалите тестовый вызов send_alert из сценария.
Мониторинг использования ЦПУ
Давайте добавим логику для мониторинга использования ЦПУ. Откройте сценарий и добавьте следующий код:
## Мониторинг использования ЦПУ
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
cpu_usage=${cpu_usage%.*} ## Преобразование в целое число
echo "Current CPU usage: $cpu_usage%"
if ((cpu_usage >= CPU_THRESHOLD)); then
send_alert "CPU" "$cpu_usage"
fi
Вот что происходит в этом коде:
top -bn1: Запускает командуtopв пакетном режиме для одной итерации, чтобы получить статистику использования ЦПУ в реальном времени.grep "Cpu(s)": Фильтрует вывод, чтобы сосредоточиться на строке с использованием ЦПУ.awk '{print $2 + $4}': Извлекает и суммирует проценты использования ЦПУ пользователем и системой.cpu_usage=${cpu_usage%.*}: Удаляет десятичную часть, чтобы упростить сравнение с пороговым значением.if ((cpu_usage >= CPU_THRESHOLD)): Сравнивает использование ЦПУ с пороговым значением и вызывает функциюsend_alert, если порог превышен.
Запустите сценарий, чтобы протестировать мониторинг использования ЦПУ:
./system_monitor.sh
Вы должны увидеть отображенное использование ЦПУ. Если оно выше порогового значения, вы увидите оповещение.
Мониторинг использования памяти
Далее, добавьте код для мониторинга использования памяти. Вставьте следующие строки ниже логики мониторинга ЦПУ:
## Мониторинг использования памяти
memory_usage=$(free | awk '/Mem/ {printf("%3.1f", ($3/$2) * 100)}')
echo "Current memory usage: $memory_usage%"
memory_usage=${memory_usage%.*}
if ((memory_usage >= MEMORY_THRESHOLD)); then
send_alert "Memory" "$memory_usage"
fi
Вот как это работает:
free: Предоставляет статистику использования памяти.awk '/Mem/ {printf("%3.1f", ($3/$2) * 100)}': Вычисляет процент используемой памяти, разделив используемую память ($3) на общую память ($2).- Сценарий сравнивает
memory_usageс пороговым значением и отправляет оповещение, если это необходимо.
Запустите сценарий:
./system_monitor.sh
Вы должны увидеть процент использования памяти, и будут вызваны оповещения, если использование превышает пороговое значение.
Мониторинг использования диска
Теперь давайте настроим мониторинг использования диска. Добавьте следующий код ниже логики мониторинга памяти:
## Мониторинг использования диска
disk_usage=$(df -h / | awk '/\// {print $(NF-1)}')
disk_usage=${disk_usage%?} ## Удалить знак %
echo "Current disk usage: $disk_usage%"
if ((disk_usage >= DISK_THRESHOLD)); then
send_alert "Disk" "$disk_usage"
fi
Пояснения:
df -h /: Получает статистику использования диска для корневого каталога.awk '/\// {print $(NF-1)}': Извлекает столбец с процентом использования.disk_usage=${disk_usage%?}: Удаляет символ%для упрощения сравнения.- Генерируются оповещения, если использование диска превышает пороговое значение.
Запустите скрипт:
./system_monitor.sh
Вы должны увидеть статистику использования диска, и при необходимости будут сгенерированы оповещения.
Объединение всего в цикл
Наконец, объединим мониторинг ЦПУ, памяти и диска в цикл для непрерывного мониторинга. Замените существующее содержимое на следующее:
while true; do
## Мониторинг ЦПУ
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
cpu_usage=${cpu_usage%.*}
if ((cpu_usage >= CPU_THRESHOLD)); then
send_alert "CPU" "$cpu_usage"
fi
## Мониторинг памяти
memory_usage=$(free | awk '/Mem/ {printf("%3.1f", ($3/$2) * 100)}')
memory_usage=${memory_usage%.*}
if ((memory_usage >= MEMORY_THRESHOLD)); then
send_alert "Memory" "$memory_usage"
fi
## Мониторинг диска
disk_usage=$(df -h / | awk '/\// {print $(NF-1)}')
disk_usage=${disk_usage%?}
if ((disk_usage >= DISK_THRESHOLD)); then
send_alert "Disk" "$disk_usage"
fi
## Отображение текущей статистики
clear
echo "Resource Usage:"
echo "CPU: $cpu_usage%"
echo "Memory: $memory_usage%"
echo "Disk: $disk_usage%"
sleep 2
done
Этот цикл непрерывно мониторит и обновляет использование ресурсов, очищая экран и отображая текущую статистику с регулярными интервалами.
Запустите скрипт для тестирования:
./system_monitor.sh
Резюме
Поздравляем! Вы создали полностью функциональный монитор системы Linux с использованием Bash. Этот инструмент отслеживает использование ЦПУ, памяти и диска в реальном времени и оповещает вас, если использование превышает предварительно определенные пороговые значения. Не стесняйтесь расширять скрипт, добавляя такие функции, как уведомления по электронной почте или мониторинг дополнительных ресурсов.




