TGViewer
Библиотека программиста (книги для разработчиков) Библиотека программиста (книги для разработчиков) @programmist_of · 20.7K subscribers
Post #3222 3.08K

Forwarded from Bash Советы

🔥 Предупреждение о переполнении дисков + топ “пожирателей” места

Данный ниже скрипт проверит заполнение всех ФС (кроме tmpfs/devtmpfs/squashfs/overlay), и если порог превышен - пришлёт сводку с ТОП директориями по размеру. Поддерживает уведомления в Telegram (через Bot API) или просто вывод в консоль.



Функционал

✅ Проверяет все реальные файловые системы
✅ Порог заполнения настраивается (THRESHOLD, по умолчанию 85%)
✅ Показывает TOP-N самых “тяжёлых” директорий на проблемном разделе (TOPN, по умолчанию 5)
✅ Исключения по mountpoint через EXCLUDE_REGEX (например, Docker)
✅ Уведомления в Telegram, если задать TELEGRAM_BOT_TOKEN и TELEGRAM_CHAT_ID




#!/usr/bin/env bash
# автор: https://t.me/bash_srv
set -Eeuo pipefail

# Настройки (можно переопределять переменными окружения)
THRESHOLD="${THRESHOLD:-85}" # % использования ФС, начиная с которого тревожим
TOPN="${TOPN:-5}" # сколько топ-директорий показать
EXCLUDE_REGEX="${EXCLUDE_REGEX:-^(/sys|/proc|/run|/snap|/var/lib/docker|/var/lib/containers)}"

# Исключаем псевдо-ФС
DF_TYPES=(-x tmpfs -x devtmpfs -x squashfs -x overlay)

notify() {
local msg="$1"
if [[ -n "${TELEGRAM_BOT_TOKEN:-}" && -n "${TELEGRAM_CHAT_ID:-}" ]]; then
curl -sS -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
-d "chat_id=${TELEGRAM_CHAT_ID}" \
--data-urlencode "text=${msg}" >/dev/null || true
else
echo "$msg"
fi
}

alerts=()

# Читаем: <mountpoint> <use%>
while read -r mnt use; do
[[ "$mnt" =~ $EXCLUDE_REGEX ]] && continue
use="${use%\%}"
if (( use >= THRESHOLD )); then
# du в мегабайтах по границам ФС (-x), глубина 1, сортировка по размеру
top=$(du -x -m --max-depth=1 "$mnt" 2>/dev/null | sort -nr | head -n "$TOPN" \
| awk '{printf " %6d MB %s\n",$1,$2}')
alerts+=("⚠️ ФС $mnt занята на ${use}%%. Топ ${TOPN} директорий:\n${top}")
fi
done < <(df -P "${DF_TYPES[@]}" | awk 'NR>1{print $(NF), $(NF-1)}')

if ((${#alerts[@]})); then
host=$(hostname -f 2>/dev/null || hostname)
ts=$(date '+%F %T %Z')
msg="🚨 Диск почти заполнен: ${host}\n${ts}\nПорог: ${THRESHOLD}%%\n\n$(printf "%s\n\n" "${alerts[@]}")"
notify "$msg"
else
echo "✅ Все файловые системы ниже ${THRESHOLD}%."
fi



Установка


sudo install -m 0755 df_guard.sh /usr/local/bin/df_guard.sh


Примеры запуска

- Раз в 15 минут, тревожим после 90%, показываем TOP-3 и шлём в Telegram:


# В crontab (root)
*/15 * * * * THRESHOLD=90 TOPN=3 TELEGRAM_BOT_TOKEN=123:ABC TELEGRAM_CHAT_ID=123456 \
nice -n 10 ionice -c3 /usr/local/bin/df_guard.sh


- Исключаем Docker и снапшоты:


EXCLUDE_REGEX='^(/var/lib/docker|/mnt/snapshots)' df_guard.sh



- Для больших ФС du может крутиться дольше - добавьте nice/ionice, как в примере.
- Хотите человеческие единицы? Замените -m на -h и уберите выравнивание в awk.
- Если сервер за NAT/без выхода в интернет - уведомления уйдут в stdout и попадут в системную почту cron.

👉@bash_srv
  • ❤ 3
  • 👍 2
  • 😁 1
More from @programmist_of
  1. Sep 28, 2026📚 40 Algorithms Every Programmer Should Know: Hone your problem-solving skills by learnin…
  2. Sep 24, 2026ИИ-система может отлично решать задачи бизнеса, но при этом оставаться уязвимой. Утечки да…
  3. Sep 22, 2026📚 Machine Learning Simplified: A Gentle Introduction to Supervised Learning (2022) ✍️ Авт…
  4. Sep 15, 2026📚 We, Programmers: A Chronicle of Coders from Ada to AI (2025) ✍️ Robert C. Martin Книга…
  5. Sep 6, 2026📚 Fluent Python Clear, Concise and Effective Programming, 2nd Edition (2022) ✍️Автор: Luc…
  6. Sep 3, 2026️️️️️️️️ 🔥 Приглашаем на бесплатный открытый вебинар курса «ИИ-агенты: продвинутое внедре…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →