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

Данный ниже скрипт проверит заполнение всех ФС (кроме 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://www.tgoop.com/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
👍41



tgoop.com/bash_srv/136
Create:
Last Update:

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

Данный ниже скрипт проверит заполнение всех ФС (кроме 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://www.tgoop.com/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

BY Bash Советы




Share with your friend now:
tgoop.com/bash_srv/136

View MORE
Open in Telegram


Telegram News

Date: |

Content is editable within two days of publishing The group also hosted discussions on committing arson, Judge Hui said, including setting roadblocks on fire, hurling petrol bombs at police stations and teaching people to make such weapons. The conversation linked to arson went on for two to three months, Hui said. Telegram message that reads: "Bear Market Screaming Therapy Group. You are only allowed to send screaming voice notes. Everything else = BAN. Text pics, videos, stickers, gif = BAN. Anything other than screaming = BAN. You think you are smart = BAN. The SUCK Channel on Telegram, with a message saying some content has been removed by the police. Photo: Telegram screenshot. "Doxxing content is forbidden on Telegram and our moderators routinely remove such content from around the world," said a spokesman for the messaging app, Remi Vaughn.
from us


Telegram Bash Советы
FROM American