Запишите предупреждения о ресурсах

ShellBeginner
Практиковаться сейчас

Введение

FRAME Studio нужна короткая запись рабочего сеанса, а не исчезающий экран терминала. Сборщик ресурсов в этом независимом экземпляре уже завершён. Вы превратите наблюдения в явные предупреждения и добавите их, не теряя предыдущую запись оператора.

Вы реализуете три функции: классификацию показания, запись полной строки и повторение готового действия измерения. Нужны базовые переменные, функции, условия и циклы Bash; первая работа объясняет показатели. Её файлы не требуются. Пределы — локальная учебная политика, а не универсальные рекомендации для производства. Время — оценка автора.

Назначьте каждому показанию явный статус

На этом шаге вы превратите процент и его предел в многократно используемое решение о предупреждении.

Начните в Terminal. Этот независимый экземпляр уже содержит рабочий metrics.sh; предыдущие файлы не нужны. Войдите в каталог:

cd /home/labex/project/resource-watch

Посмотрите текущее показание:

bash snapshot.sh

Четыре поля с табуляцией — метка UTC, CPU вне простоя, давление на память и заполнение целевой файловой системы. Они описывают этот экземпляр, а не парк производственных машин. Предупреждение о ресурсах не доказывает сбой экспорта фотографий.

cat показывает политику без изменений:

cat policy.sh

Прочитайте три предела и полные пути цели и журнала. В этой работе пределы CPU и памяти равны 80, диска — 50. Это учебные решения. Явное правило: WARN, если показание больше либо равно собственному пределу, иначе OK. Равенство важно. Сохраните предоставленные политику и сборщик.

Откройте незавершённые функции через nano:

Эта работа начинается заново с готовым работающим файлом показателей. Редактируйте файл функций мониторинга из следующей команды, а не копируйте сюда прежний файл показателей. Три значения LIMIT в политике — целые проценты; TARGET — наблюдаемый каталог, LOG — путь истории. Чтение политики не меняет её.

nano monitor-functions.sh

Замените только classify:

classify() {
    if (( $1 >= $2 )); then
        echo WARN
    else
        echo OK
    fi
}

Первый аргумент — показание, второй — предел. ((...)) сравнивает числа; >= включает равенство. Обе ветви печатают статус: нормальное показание выдаёт OK, а не молчит. Сохраните: Ctrl+O, Enter, Ctrl+X.

source загружает определения. Запускайте тесты в bash -c, поскольку интерактивная оболочка — Zsh. Одинарные кавычки сохраняют команды для Bash:

bash -c 'source ./monitor-functions.sh; classify 79 80; classify 80 80; classify 81 80'
OK
WARN
WARN

Эти заданные значения проверяют правило и не являются текущими измерениями CPU. Функция, всегда возвращающая WARN или OK, неверна, даже если сегодняшнее состояние станции случайно совпадает.

Добавьте полную запись мониторинга

На этом шаге вы запишете все показания и их независимые статусы, не заменяя историю.

Оставайтесь в Terminal, в /home/labex/project/resource-watch. Сначала прочитайте историю оператора:

cat history.tsv

Её исходная строка должна остаться в начале побайтно неизменной. history.tsv — настоящий результат, а не заполняемый вручную отчёт. Каждая новая строка содержит семь полей с табуляцией: метка UTC, CPU, память, диск, затем статусы CPU, памяти и диска в этом порядке.

Откройте функции:

nano monitor-functions.sh

Замените только record_sample:

record_sample() {
    local stamp=$1 cpu=$2 memory=$3 disk=$4 logfile=$5
    printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \
        "$stamp" "$cpu" "$memory" "$disk" \
        "$(classify "$cpu" "$CPU_LIMIT")" \
        "$(classify "$memory" "$MEMORY_LIMIT")" \
        "$(classify "$disk" "$DISK_LIMIT")" >> "$logfile"
}

printf подставляет значения вместо каждого %s, \t записывает табуляцию, \n завершает строку. Обратная косая черта в конце строки продолжает ту же команду. $(...) захватывает вывод функции. Двойные кавычки сохраняют каждое значение и путь журнала с пробелами. >> добавляет, тогда как > уничтожил бы прежние записи. Сохраните: Ctrl+O, Enter, Ctrl+X.

Проверьте заданную запись в отдельном учебном файле. source ./policy.sh загружает пределы в этот процесс Bash. Они не сохраняются автоматически в другом терминале или следующем вызове bash -c.

bash -c 'source ./policy.sh; source ./monitor-functions.sh; record_sample 2026-01-02T03:04:05Z 10 85 20 practice.tsv'
cat practice.tsv
2026-01-02T03:04:05Z 10 85 20 OK WARN OK

Предупреждение памяти сравнивает 85 с 80 и не превращает остальные статусы в WARN. Повторный вызов добавляет ещё одну учебную строку. Не добавляйте примеры в history.tsv: этот файл предназначен для настоящих измерений.

Прочитайте семь полей учебного примера слева направо:

Поле Пример Значение
1 2026-01-02T03:04:05Z Время UTC; Z обозначает UTC
2 10 Процент CPU вне простоя
3 85 Процент давления на память
4 20 Процент заполнения целевой системы
5 OK CPU 10 ниже своего предела 80
6 WARN Память 85 достигает или превышает свой предел 80
7 OK Диск 20 ниже своего предела 50

Табуляция в Terminal может выглядеть как неравномерные пробелы. Сохраните настоящие табуляции функции; не выравнивайте реальную историю пробелами вручную. Исходная запись оператора — подготовленный фон, поэтому её более ранняя дата ожидаема. Только отдельный учебный файл получает этот заданный пример.

Выполните ограниченное наблюдение и сохраните историю

На этом шаге вы повторите настоящие измерения, проверите результат и продолжите работу без потери прогресса.

Оставайтесь в Terminal, в /home/labex/project/resource-watch. Готовый monitor.sh предоставляет capture_once target logfile: получает новое наблюдение, вызывает вашу запись и показывает сохранённую строку. run_monitor должен передавать пути без изменений и вызывать действие ровно запрошенное число раз. Каждое измерение содержит новое секундное окно CPU; это ограниченное наблюдение, а не точный планировщик.

nano monitor-functions.sh

Замените только эту функцию:

run_monitor() {
    local count=$1 target=$2 logfile=$3
    local n
    for ((n = 0; n < count; n++)); do
        capture_once "$target" "$logfile"
    done
}

Арифметический цикл начинается с нуля, продолжается, пока n меньше count, и увеличивает n после каждого измерения. Кавычки сохраняют оба пути. Эквивалентный цикл while тоже допустим. Сохраните: Ctrl+O, Enter, Ctrl+X.

Выполните три настоящих измерения:

bash monitor.sh 3

До возврата приглашения должны появиться три строки. Каждая метка UTC должна быть позже предыдущей. Реальные значения меняются, и нормальный запуск может не выдать предупреждений. Программа принимает от 1 до 30 измерений. При долгом наблюдении Ctrl+C останавливает скрипт переднего плана и сохраняет добавленные строки. Завершать другие процессы не нужно.

Прочитайте результат и посчитайте строки. wc -l считает строки, заканчивающиеся переводом строки:

cat history.tsv
wc -l history.tsv

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

Продолжите одним измерением:

bash monitor.sh 1
wc -l history.tsv

Число строк увеличится на одну. Повторение безопасно, поскольку запись добавляет, а не заменяет. Сравните каждый статус с его показанием и пределом в policy.sh.

Намеренно попробуйте обычную ошибку ввода: ноль отвергается до измерения.

bash monitor.sh 0
Use a sample count from 1 to 30.

Этот ожидаемый сбой завершается статусом 2 и не меняет историю. Восстановитесь с допустимым количеством, без сброса VM и редактирования истории:

bash monitor.sh 1

Добавится новая строка. Готовый сборщик также отвергает неполные показатели, а не добавляет правдоподобное на вид пустое наблюдение.

Проверьте результат

  • Исходная запись оператора остаётся в начале, за ней идут ваши новые наблюдения.
  • Первый запуск добавляет три строки; продолжение одним измерением — ещё одну. Больше действительных строк после повторения команд допустимо.
  • Сначала прочитайте три процента, затем сравните каждый с собственным пределом. Три статуса OK допустимы; создавать нагрузку или удалять файлы ради предупреждения не нужно.
  • Каждое измерение ждёт нового интервала CPU. Короткая пауза нормальна: не нажимайте Enter многократно во время сбора. Возврат приглашения означает конец ограниченного запуска. Закрытие Terminal не сохраняет непрерывный монитор работающим.

Резюме

Вы реализовали предупреждение с включением равенства, добавили полные записи с тремя независимыми статусами и повторили настоящие измерения, сохранив историю. Теперь можно выполнить короткое наблюдение, прочитать его свидетельства и продолжить. Независимое испытание меняет цель и политику, повторно используя изученные инструменты и контракты.