Если вы хотите отслеживать появление новых файлов в определённой директории (например, загрузки, обмен данными или бэкапы), этот скрипт поможет вести лог всех изменений.
#!/bin/bash
WATCH_DIR="/home/user/incoming"
LOG_FILE="/var/log/new_files.log"
STATE_FILE="/var/tmp/last_files_state.txt"
echo "📁 Сканирование новых файлов в $WATCH_DIR..." | tee -a $LOG_FILE
# Получаем текущий список файлов
find "$WATCH_DIR" -type f > /tmp/current_files.txt
# Если это первый запуск — сохраняем текущий список и выходим
if [ ! -f "$STATE_FILE" ]; then
cp /tmp/current_files.txt "$STATE_FILE"
echo "⚠️ Первичный запуск — база создана." | tee -a $LOG_FILE
exit 0
fi
# Ищем новые файлы по сравнению с предыдущим состоянием
NEW_FILES=$(comm -13 "$STATE_FILE" /tmp/current_files.txt)
if [ -n "$NEW_FILES" ]; then
echo "🆕 Найдены новые файлы:"
echo "$NEW_FILES" | tee -a $LOG_FILE
else
echo "✔️ Новых файлов не обнаружено." | tee -a $LOG_FILE
fi
# Обновляем состояние
cp /tmp/current_files.txt "$STATE_FILE"
find
быстро обходит все файлы в каталогеcomm
сравнивает текущее и предыдущее состояния*/15 * * * * /path/to/watch_new_files.sh
🗣 Подходит для систем, где важно знать, что и когда появилось — например, при интеграции с внешними источниками данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13
Иногда systemd-службы зависают или перестают отвечать, оставаясь "активными". Этот скрипт помогает выявить неработающие сервисы по логике "нет активных сокетов / нет сетевого ответа" и перезапускает их.
#!/bin/bash
# Список сервисов для проверки
SERVICES=("nginx" "postgresql" "my_custom_service")
LOG_FILE="/var/log/systemd_healthcheck.log"
echo "🔍 Проверка состояния сервисов... $(date)" | tee -a $LOG_FILE
for svc in "${SERVICES[@]}"; do
systemctl is-active --quiet "$svc"
STATUS=$?
if [ $STATUS -ne 0 ]; then
echo "❌ Сервис $svc не работает. Перезапускаем..." | tee -a $LOG_FILE
systemctl restart "$svc"
sleep 1
systemctl is-active --quiet "$svc" && echo "✅ $svc запущен повторно." | tee -a $LOG_FILE
else
echo "✔️ $svc работает исправно." | tee -a $LOG_FILE
fi
done
systemctl is-active
проверяет, работает ли служба*/10 * * * * /path/to/service_healthcheck.sh
🗣 Особенно полезен на серверах без полноценного мониторинга (Prometheus, Zabbix) или в односерверных проектах.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤🔥4
Иногда важные системные файлы могут быть случайно или намеренно изменены. Этот скрипт помогает выявить изменения в бинарниках, конфигурациях и других критичных файлах с помощью встроенного механизма
debsums
.#!/bin/bash
LOG_FILE="/var/log/integrity_check.log"
echo "🔎 Проверка целостности установленных пакетов... $(date)" | tee -a "$LOG_FILE"
# Устанавливаем debsums, если не установлен
if ! command -v debsums &> /dev/null; then
echo "📦 Установка debsums..." | tee -a "$LOG_FILE"
sudo apt update && sudo apt install -y debsums
fi
# Выполняем проверку всех пакетов
debsums -s | tee -a "$LOG_FILE"
# Проверка только конфигурационных файлов
echo "⚙️ Проверка конфигураций:"
debsums -cs | tee -a "$LOG_FILE"
echo "✅ Проверка завершена." | tee -a "$LOG_FILE"
debsums
проверяет контрольные суммы всех файлов, установленных через APT-cs
ограничивает проверку только конфигурационными файлами.@daily /path/to/integrity_check.sh
🗣 Подходит для серверов, критичных к стабильности и безопасности — например, bastion-хостов, шлюзов или CI/CD-инфраструктуры.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
На серверах со временем накапливается множество лог-файлов, особенно в /var/log. Этот скрипт помогает автоматически удалять устаревшие логи, экономя дисковое пространство и упрощая администрирование.
#!/bin/bash
LOG_DIR="/var/log"
AGE_DAYS=14
LOG_FILE="/var/log/log_cleanup.log"
echo "🧼 Очистка логов старше $AGE_DAYS дней в $LOG_DIR... $(date)" | tee -a "$LOG_FILE"
# Удаляем .log-файлы старше N дней
find "$LOG_DIR" -type f -name "*.log" -mtime +$AGE_DAYS -exec rm -v {} \; | tee -a "$LOG_FILE"
# Удаляем сжатые архивы логов старше N дней
find "$LOG_DIR" -type f \( -name "*.gz" -o -name "*.xz" \) -mtime +$AGE_DAYS -exec rm -v {} \; | tee -a "$LOG_FILE"
echo "✅ Очистка завершена." | tee -a "$LOG_FILE"
find -mtime
определяет файлы старше заданного количества дней.log
, так и архивы .gz
, .xz
/var/log
, а также каталогов с логами nginx, apache и других демонов.0 3 * * * /path/to/log_cleanup.sh
🗣 Особенно полезен на прод-серверах с большим объёмом логов, где logrotate не всегда охватывает все случаи.
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥10👍3
Если вы работаете с несколькими серверами, сервисами или API, бывает полезно автоматизировать проверку их доступности.
#!/bin/bash
HOSTS_FILE="/etc/hostlist.txt"
LOG_FILE="/var/log/host_ping.log"
echo "🌐 Проверка доступности хостов... $(date)" | tee -a "$LOG_FILE"
# Проверка каждого хоста из списка
while read -r host; do
if ping -c 1 -W 1 "$host" &> /dev/null; then
echo "✅ $host доступен" | tee -a "$LOG_FILE"
else
echo "❌ $host недоступен" | tee -a "$LOG_FILE"
fi
done < "$HOSTS_FILE"
echo "📋 Проверка завершена." | tee -a "$LOG_FILE"
8.8.8.8
example.com
192.168.1.1
*/15 * * * * /path/to/ping_hosts.sh
🗣 Подходит для DevOps-инфраструктуры, сетевых администраторов и всех, кто работает с десятками хостов или микросервисов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤🔥3
Если вы администрируете офисную инфраструктуру или домашний сервер печати, важно следить за состоянием очередей: зависшие задания, неработающие принтеры или накопившиеся задания могут мешать пользователям. Этот скрипт проверяет статус CUPS-принтеров и журналирует очередь печати.
#!/bin/bash
LOG_FILE="/var/log/print_queue_monitor.log"
echo "🖨 Проверка состояния принтеров и очередей... $(date)" | tee -a "$LOG_FILE"
# Проверяем статус всех установленных принтеров
lpstat -p | tee -a "$LOG_FILE"
# Показываем текущую очередь заданий
QUEUE=$(lpq)
echo "📄 Очередь заданий:" | tee -a "$LOG_FILE"
echo "$QUEUE" | tee -a "$LOG_FILE"
# Выводим предупреждение, если очередь не пуста
if echo "$QUEUE" | grep -q "no entries"; then
echo "✅ Очередь пуста." | tee -a "$LOG_FILE"
else
echo "⚠️ Обнаружены задания в очереди!" | tee -a "$LOG_FILE"
fi
echo "✅ Проверка завершена." | tee -a "$LOG_FILE"
lpstat
показывает состояние каждого принтераlpq
проверяет активные задания в очереди*/10 * * * * /path/to/print_monitor.sh
🗣 Особенно полезен для серверов печати, Raspberry Pi-принтшлюзов и офисных станций с несколькими принтерами.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
Если вы хотите знать, кто использует графическую оболочку, когда были последние X-сессии или сколько времени пользователь проводит в GUI — этот скрипт поможет отследить активность в X-среде (например, Xorg, X11).
#!/bin/bash
LOG_FILE="/var/log/xsession_monitor.log"
echo "🖥 Проверка X-сессий... $(date)" | tee -a "$LOG_FILE"
# Проверка активных X-сессий
SESSIONS=$(who | grep -E "(:[0-9]+)")
if [ -n "$SESSIONS" ]; then
echo "📋 Найдены активные X-сессии:" | tee -a "$LOG_FILE"
echo "$SESSIONS" | tee -a "$LOG_FILE"
else
echo "🚫 Активных X-сессий не обнаружено." | tee -a "$LOG_FILE"
fi
# Проверка логов X-сервера (опционально)
if [ -f /var/log/Xorg.0.log ]; then
echo "🧾 Последние строки из Xorg.0.log:" | tee -a "$LOG_FILE"
tail -n 5 /var/log/Xorg.0.log | tee -a "$LOG_FILE"
fi
echo "✅ Проверка завершена." | tee -a "$LOG_FILE"
who
позволяет отслеживать графические сеансы (:0
, :1
и т.д.)*/15 * * * * /path/to/xsession_monitor.sh
🗣 Особенно полезен в образовательных или терминальных средах, где важно отслеживать использование GUI.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤🔥2🌚2
Если вы администрируете сервер или рабочую станцию на Debian/Ubuntu, важно регулярно проверять наличие обновлений. Этот скрипт автоматизирует проверку доступных обновлений, выводит список и пишет лог — удобно для мониторинга и уведомлений.
#!/bin/bash
LOG_FILE="/var/log/apt_update_check.log"
echo "🔄 Проверка обновлений APT... $(date)" | tee -a "$LOG_FILE"
# Обновляем списки пакетов
sudo apt update -qq
# Проверяем наличие обновлений
UPGRADES=$(apt list --upgradable 2>/dev/null | grep -v "Listing")
if [ -n "$UPGRADES" ]; then
echo "📦 Доступны обновления:" | tee -a "$LOG_FILE"
echo "$UPGRADES" | tee -a "$LOG_FILE"
else
echo "✅ Все пакеты актуальны." | tee -a "$LOG_FILE"
fi
echo "🧾 Проверка завершена." | tee -a "$LOG_FILE"
0 6 * * * /path/to/apt_update_check.sh
🗣 Идеально подходит для серверов без автоматических обновлений — вы будете знать, когда что-то требует вмешательства.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥3
Использование swap может указывать на нехватку оперативной памяти. Этот скрипт позволяет отслеживать текущий объём занятого swap, логировать превышения порога и помогает вовремя выявить проблемы с производительностью.
#!/bin/bash
LOG_FILE="/var/log/swap_monitor.log"
THRESHOLD_MB=100 # Порог использования swap в мегабайтах
echo "📊 Проверка использования swap... $(date)" | tee -a "$LOG_FILE"
# Получаем текущий объём используемого swap в МБ
USED_SWAP=$(free -m | awk '/Swap:/ {print $3}')
if [ "$USED_SWAP" -ge "$THRESHOLD_MB" ]; then
echo "⚠️ Использование swap: ${USED_SWAP}MB (выше порога ${THRESHOLD_MB}MB)" | tee -a "$LOG_FILE"
else
echo "✅ Swap в норме: ${USED_SWAP}MB" | tee -a "$LOG_FILE"
fi
echo "🔚 Проверка завершена." | tee -a "$LOG_FILE"
free -m
быстро даёт информацию о RAM и swap*/30 * * * * /path/to/swap_monitor.sh
🗣 Подходит для администраторов, DevOps-инженеров и всех, кто следит за стабильностью и производительностью системы.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥9👍4🔥1
Со временем в системе могут накапливаться неиспользуемые пакеты, зависимости и устаревшие ядра. Этот скрипт помогает безопасно очищать такие остатки, экономя место и поддерживая порядок в системе.
#!/bin/bash
LOG_FILE="/var/log/apt_cleanup.log"
echo "🧹 Очистка системы от неиспользуемых пакетов... $(date)" | tee -a "$LOG_FILE"
# Удаление неиспользуемых зависимостей
sudo apt autoremove -y | tee -a "$LOG_FILE"
# Очистка кэша пакетов
sudo apt clean | tee -a "$LOG_FILE"
# Очистка устаревших пакетов локального кэша
sudo apt autoclean | tee -a "$LOG_FILE"
echo "✅ Очистка завершена." | tee -a "$LOG_FILE"
autoremove
удаляет пакеты, которые больше не требуютсяclean
освобождает место, удаляя загруженные архивыautoclean
очищает только устаревшие архивы, которые уже недоступны в репозиториях0 4 * * 0 /path/to/apt_cleanup.sh
🗣 Отлично подходит для серверов и рабочих машин, где важно держать систему в чистоте без ручной рутины.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥7👍5
Мониторинг доступной оперативной памяти помогает вовремя обнаружить утечки, перегрузки и определить, какие задачи съедают ресурсы.
Этот скрипт проверяет доступную память, логирует предупреждения и может использоваться для базового анализа производительности.
#!/bin/bash
LOG_FILE="/var/log/mem_monitor.log"
THRESHOLD_MB=500 # Порог доступной памяти (в мегабайтах)
echo "🔍 Проверка памяти... $(date)" | tee -a "$LOG_FILE"
# Получаем доступную память в МБ
AVAIL_MEM=$(free -m | awk '/Mem:/ {print $7}')
if [ "$AVAIL_MEM" -lt "$THRESHOLD_MB" ]; then
echo "⚠️ Доступно мало памяти: ${AVAIL_MEM}MB (< ${THRESHOLD_MB}MB)" | tee -a "$LOG_FILE"
echo "🧾 Топ 5 процессов по использованию RAM:" | tee -a "$LOG_FILE"
ps -eo pid,comm,%mem --sort=-%mem | head -n 6 | tee -a "$LOG_FILE"
else
echo "✅ Память в норме: ${AVAIL_MEM}MB" | tee -a "$LOG_FILE"
fi
echo "🛑 Проверка завершена." | tee -a "$LOG_FILE"
free -m
даёт удобный формат доступной памятиps -eo
показывает, какие процессы используют RAM/var/log
, можно настроить уведомления через email, Telegram, Slack и т.д*/15 * * * * /path/to/mem_monitor.sh
🗣 Особенно полезен для серверов, рабочих станций с ограниченным объёмом ОЗУ, VPS и embedded-устройств.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Контроль за критичными файлами — важная мера безопасности. Этот скрипт отслеживает изменения в
sudoers
, passwd
, shadow
и других чувствительных файлах, уведомляя при их модификации.#!/bin/bash
LOG_FILE="/var/log/security_watch.log"
FILES=(
"/etc/sudoers"
"/etc/passwd"
"/etc/shadow"
"/etc/group"
"/etc/ssh/sshd_config"
)
echo "🔍 Проверка контрольных сумм... $(date)" | tee -a "$LOG_FILE"
for file in "${FILES[@]}"; do
CHECKSUM_FILE="/var/lib/security_watch/$(basename $file).sha256"
if [ ! -f "$CHECKSUM_FILE" ]; then
mkdir -p /var/lib/security_watch
sha256sum "$file" > "$CHECKSUM_FILE"
echo "📦 Сохранили контрольную сумму для $file" | tee -a "$LOG_FILE"
continue
fi
CURRENT_SUM=$(sha256sum "$file")
OLD_SUM=$(cat "$CHECKSUM_FILE")
if [ "$CURRENT_SUM" != "$OLD_SUM" ]; then
echo "⚠️ Изменения в файле $file!" | tee -a "$LOG_FILE"
echo "$CURRENT_SUM" > "$CHECKSUM_FILE"
else
echo "✅ $file без изменений." | tee -a "$LOG_FILE"
fi
done
echo "🛡 Проверка завершена." | tee -a "$LOG_FILE"
sha256sum
проверяет целостность без лишнего шума@daily /path/to/security_watch.sh
🗣 Полезно для серверов, рабочих станций с несколькими пользователями, CI/CD-агентов — чтобы быстро реагировать на подозрительные изменения.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
Многие фоновые службы в Linux (nginx, sshd, docker и др.) управляются через
systemd
. Если какая-либо из них падает или перезапускается слишком часто — это повод для внимания. Этот скрипт проверяет логи на сбои systemd-сервисов и логирует их.#!/bin/bash
LOG_FILE="/var/log/systemd_failed_services.log"
echo "🧭 Проверка systemd-сервисов... $(date)" | tee -a "$LOG_FILE"
# Получаем список сервисов со статусом failed
FAILED=$(systemctl --failed --no-legend --plain)
if [ -n "$FAILED" ]; then
echo "❌ Обнаружены сбои в systemd-сервисах:" | tee -a "$LOG_FILE"
echo "$FAILED" | tee -a "$LOG_FILE"
else
echo "✅ Все сервисы в норме." | tee -a "$LOG_FILE"
fi
echo "🔚 Проверка завершена." | tee -a "$LOG_FILE"
systemctl --failed
показывает службы с ошибками*/30 * * * * /path/to/systemd_check.sh
🗣 Подходит для серверов, рабочих станций, CI-сред — чтобы быть в курсе, если что-то важное перестало работать (например, ssh, cron, nginx, docker, postgres и др.).
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Службы, которые часто перезапускаются, могут перегружать систему или указывать на скрытые проблемы (утечки памяти, падения, ошибки конфигурации). Этот скрипт ищет systemd-сервисы, перезапускавшиеся более X раз, и логирует их.
#!/bin/bash
LOG_FILE="/var/log/systemd_restart_watch.log"
RESTART_THRESHOLD=3
echo "🔄 Анализ перезапусков systemd-сервисов... $(date)" | tee -a "$LOG_FILE"
# Получаем список активных сервисов
for svc in $(systemctl list-units --type=service --no-pager --no-legend | awk '{print $1}'); do
# Извлекаем число рестартов
RESTARTS=$(journalctl -u "$svc" --since "1 hour ago" | grep -c "Starting")
if [ "$RESTARTS" -gt "$RESTART_THRESHOLD" ]; then
echo "⚠️ Сервис $svc перезапущен $RESTARTS раз(а) за последний час" | tee -a "$LOG_FILE"
fi
done
echo "✅ Проверка завершена." | tee -a "$LOG_FILE"
systemctl list-units
— список всех активных сервисовjournalctl
— журнал перезапусковRESTART_THRESHOLD
) можно адаптировать под систему*/20 * * * * /path/to/systemd_restart_watch.sh
🗣 Особенно полезно для DevOps-инженеров, системных админов, SRE-команд — когда важно не просто знать, что сервис упал, а выявить нестабильные процессы до сбоя
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
🧩 Мониторинг зависших процессов в Linux (на основе времени выполнения)
В Linux процессы могут "зависнуть" — не завершаться, занимать ресурсы, но ничего не делать. Этот скрипт помогает находить такие задачи, работающие дольше заданного времени (например, 1 час), и логировать их для анализа.
⚙️ Исходный код
🟢
🟢 Сравниваем с порогом (по умолчанию 60 минут)
🟢 Скрипт удобен для поиска подвисших cron-задач, rsync, python-скриптов и др.
🟢 Можно доработать: исключить сервисы, логин-сессии, добавить автоубийство (kill)
➡️ Добавьте в crontab:
😎 PyLinux | #scripts
В Linux процессы могут "зависнуть" — не завершаться, занимать ресурсы, но ничего не делать. Этот скрипт помогает находить такие задачи, работающие дольше заданного времени (например, 1 час), и логировать их для анализа.
#!/bin/bash
LOG_FILE="/var/log/stuck_processes.log"
MAX_RUNTIME_MINUTES=60
echo "⏱️ Поиск процессов старше $MAX_RUNTIME_MINUTES минут... $(date)" | tee -a "$LOG_FILE"
# Получаем текущий timestamp
NOW=$(date +%s)
# Получаем список всех процессов с временем запуска
ps -eo pid,etimes,comm --no-headers | while read -r pid etimes comm; do
if [ "$etimes" -gt $((MAX_RUNTIME_MINUTES * 60)) ]; then
echo "⚠️ PID: $pid | Время: $((etimes / 60)) мин | Команда: $comm" | tee -a "$LOG_FILE"
fi
done
echo "✅ Проверка завершена." | tee -a "$LOG_FILE"
ps -eo pid,etimes,comm
— показывает PID, время жизни процесса (в секундах) и его команду*/30 * * * * /path/to/stuck_process_monitor.sh
🗣 Полезно для CI/CD, серверов, рабочих станций и всех, где важна своевременная очистка висящих задач
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Иногда процессы начинают резко “есть” больше оперативной памяти (memory leak), что может привести к падению системы. Этот скрипт отслеживает процессы, которые превысили заданный порог по RAM, и логирует их для анализа.
#!/bin/bash
LOG_FILE="/var/log/memory_spike.log"
THRESHOLD_MB=500 # Порог в МБ
echo "📊 Поиск процессов, использующих больше ${THRESHOLD_MB}MB RAM... $(date)" | tee -a "$LOG_FILE"
# Выводим PID, имя процесса и использование памяти в МБ
ps -eo pid,comm,rss --sort=-rss --no-headers | while read -r pid comm rss; do
mem_mb=$((rss / 1024))
if [ "$mem_mb" -gt "$THRESHOLD_MB" ]; then
echo "⚠️ PID: $pid | RAM: ${mem_mb}MB | Команда: $comm" | tee -a "$LOG_FILE"
fi
done
echo "✅ Проверка завершена." | tee -a "$LOG_FILE"
ps -eo pid,comm,rss
— показывает процессы с потреблением памятиrss
(resident set size) с порогом в MBkill
проблемных процессов*/15 * * * * /path/to/memory_spike_monitor.sh
🗣 Особенно полезно для серверов, CI/CD-агентов и рабочих станций с ограниченной RAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Непредвиденное увеличение числа подключений к MySQL может привести к сбоям, перегрузке или отказу в обслуживании. Этот скрипт отслеживает количество текущих подключений, сравнивает с порогом и логирует события.
#!/bin/bash
LOG_FILE="/var/log/mysql_conn_watch.log"
THRESHOLD=100 # Порог количества подключений
echo "🔎 Проверка количества MySQL-подключений... $(date)" | tee -a "$LOG_FILE"
# Получаем количество подключений
CONN_COUNT=$(mysql -u root -e "SHOW STATUS LIKE 'Threads_connected';" 2>/dev/null | awk '/Threads_connected/ {print $2}')
if [ -z "$CONN_COUNT" ]; then
echo "❌ Не удалось получить данные от MySQL" | tee -a "$LOG_FILE"
exit 1
fi
if [ "$CONN_COUNT" -gt "$THRESHOLD" ]; then
echo "⚠️ Подключений слишком много: $CONN_COUNT (порог: $THRESHOLD)" | tee -a "$LOG_FILE"
else
echo "✅ Подключения в норме: $CONN_COUNT" | tee -a "$LOG_FILE"
fi
echo "🔚 Проверка завершена." | tee -a "$LOG_FILE"
SHOW STATUS LIKE 'Threads_connected'
— показывает число активных соединений*/10 * * * * /path/to/mysql_conn_watch.sh
🗣 Полезно для админов баз данных, DevOps-инженеров и всех, кто работает с веб-сервисами и нагруженными БД
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍2
🔌 Мониторинг изменений подключённых USB-устройств в Linux
Подключение или отключение USB-устройств (флешек, сетевых адаптеров, модемов) может быть важным событием с точки зрения безопасности или диагностики. Этот скрипт фиксирует любые изменения в списке устройств.
⚙️ Исходный код
🟢
🟢 Сравниваем с предыдущим состоянием и фиксируем изменения
🟢 Можно подключить уведомления в Telegram/Slack при изменении
➡️ Добавьте в crontab:
😎 PyLinux | #scripts
Подключение или отключение USB-устройств (флешек, сетевых адаптеров, модемов) может быть важным событием с точки зрения безопасности или диагностики. Этот скрипт фиксирует любые изменения в списке устройств.
#!/bin/bash
LOG_FILE="/var/log/usb_changes.log"
STATE_FILE="/var/lib/usb_changes/usb_state.txt"
mkdir -p /var/lib/usb_changes
echo "🔍 Проверка подключённых USB... $(date)" | tee -a "$LOG_FILE"
# Получаем текущий список USB-устройств
lsusb > /tmp/current_usb.txt
# Если нет предыдущего состояния — сохраняем и выходим
if [ ! -f "$STATE_FILE" ]; then
cp /tmp/current_usb.txt "$STATE_FILE"
echo "📦 Первое сохранение состояния USB" | tee -a "$LOG_FILE"
exit 0
fi
# Сравнение текущего и предыдущего состояния
if ! diff "$STATE_FILE" /tmp/current_usb.txt >/dev/null; then
echo "⚠️ Обнаружены изменения в USB-подключениях!" | tee -a "$LOG_FILE"
echo "--- Было:" | tee -a "$LOG_FILE"
cat "$STATE_FILE" | tee -a "$LOG_FILE"
echo "--- Стало:" | tee -a "$LOG_FILE"
cat /tmp/current_usb.txt | tee -a "$LOG_FILE"
cp /tmp/current_usb.txt "$STATE_FILE"
else
echo "✅ Изменений не найдено" | tee -a "$LOG_FILE"
fi
rm /tmp/current_usb.txt
lsusb
— быстрый способ увидеть все подключённые USB-устройства* * * * * /path/to/usb_monitor.sh
🗣 Полезно для DevOps, системных админов и специалистов по безопасности, чтобы отслеживать физические подключения к системе
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍4
Истекающие TLS-сертификаты = внезапные падения сайтов и API. Этот скрипт опрашивает хосты, парсит дату истечения сертификата и логирует предупреждения, если осталось мало дней
#!/bin/bash
# Список хостов (можно указывать порт: host:port, по умолчанию 443)
DOMAINS=("example.com" "api.example.com:443" "github.com")
THRESHOLD_DAYS=30
LOG_FILE="/var/log/tls_expiry_check.log"
echo "🔐 Проверка TLS-сертификатов... $(date)" | tee -a "$LOG_FILE"
for entry in "${DOMAINS[@]}"; do
host=${entry%:*}
port=${entry#*:}
[[ "$host" == "$port" ]] && port=443
# Получаем дату истечения (notAfter) у сервера
end_date=$(echo | timeout 10 openssl s_client -servername "$host" -connect "$host:$port" 2>/dev/null \
| openssl x509 -noout -enddate 2>/dev/null | sed 's/^notAfter=//')
if [[ -z "$end_date" ]]; then
echo "❌ Не удалось получить сертификат для $host:$port" | tee -a "$LOG_FILE"
continue
fi
end_ts=$(date -d "$end_date" +%s 2>/dev/null)
now_ts=$(date +%s)
if [[ -z "$end_ts" ]]; then
echo "❌ Не удалось распарсить дату истечения для $host:$port: $end_date" | tee -a "$LOG_FILE"
continue
fi
days_left=$(( (end_ts - now_ts) / 86400 ))
if (( days_left <= THRESHOLD_DAYS )); then
echo "⚠️ $host:$port — истекает через $days_left дн. (до $end_date)" | tee -a "$LOG_FILE"
else
echo "✅ $host:$port — $days_left дн. до истечения (до $end_date)" | tee -a "$LOG_FILE"
fi
done
echo "🔚 Проверка завершена." | tee -a "$LOG_FILE"
openssl s_client + x509
вытягивает дату истечения без лишних зависимостейhost:port
, таймаут защищает от «зависших» коннектовTHRESHOLD_DAYS
для ранних предупреждений/var/log
— удобно для алертов (email/Telegram/Slack)0 8 * * * /path/to/tls_expiry_check.sh
🗣 Подходит для прод-сервисов, внутренних API и доменов — чтобы не словить внезапный 526/495 из-за просроченного сертификата
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥8👍4
Частая причина «внезапно заполненного диска»: лог-файл удалили или ротировали, а процесс всё ещё держит его открытым. Пространство не освобождается, пока дескриптор не закрыт.
Этот скрипт находит такие случаи и логирует крупные «висящие» файлы.
#!/bin/bash
LOG_FILE="/var/log/open_deleted_files.log"
MIN_SIZE_MB=100 # Порог размера «висящего» файла для отчёта (в МБ)
echo "🗑 Поиск открытых удалённых файлов... $(date)" | tee -a "$LOG_FILE"
# Требуется lsof; лучше запускать с sudo для полноты картины
if ! command -v lsof >/dev/null 2>&1; then
echo "❌ Не найден lsof. Установите пакет lsof." | tee -a "$LOG_FILE"
exit 1
fi
# Выдаёт: PID|FD|SIZE(bytes)|CMD|USER|NAME
sudo lsof +L1 -nP 2>/dev/null | awk '
NR>1 {
cmd=$1; pid=$2; user=$3; fd=$4; size=$7;
name="";
for (i=9;i<=NF;i++) name=name $i " ";
gsub(/^[ \t]+|[ \t]+$/,"",name);
gsub(/[a-zA-Z]+$/,"",fd); # оставить только номер FD
gsub(/[^0-9]/,"",size); if (size=="") size=0; # очистить SIZE/OFF
print pid "|" fd "|" size "|" cmd "|" user "|" name
}' \
| while IFS='|' read -r PID FD BYTES CMD USER NAME; do
MB=$(( (BYTES + 1024*1024 - 1) / (1024*1024) ))
if [ "$MB" -ge "$MIN_SIZE_MB" ]; then
echo "⚠️ PID:$PID USER:$USER CMD:$CMD FD:$FD SIZE:${MB}MB NAME:${NAME}" | tee -a "$LOG_FILE"
# 🔽 Опционально: аккуратно освободить место, обнулив дескриптор (НЕ по умолчанию!)
# Использовать осторожно и только для безопасных логов, НИКОГДА для БД/критичных файлов.
# if [ -e "/proc/$PID/fd/$FD" ]; then
# : > "/proc/$PID/fd/$FD" && echo "🧹 Освобождён дескриптор /proc/$PID/fd/$FD" | tee -a "$LOG_FILE"
# fi
fi
done
echo "✅ Проверка завершена." | tee -a "$LOG_FILE"
/proc/PID/fd/N
*/15 * * * * /path/to/open_deleted_watch.sh
🗣 Полезно для прод-серверов с активным логированием (nginx, app-сервисы), где «пропавшее» место — частая головная боль.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥12🔥2