PyLinux - Всё о Linux, Python и IT
10.4K subscribers
1.4K photos
39 videos
2 files
1.27K links
У нас ты найдешь 👇

- библиотеки и скрипты python
- инструменты linux
- полезный софт
- важнейшие новости из мира IT

Связь с админом: @ghostifix

Купить рекламу: https://telega.in/c/pylinux0

Архив: @pylinux0_archive
Download Telegram
🗂 Автоматическое сканирование и логирование новых файлов в каталоге

Если вы хотите отслеживать появление новых файлов в определённой директории (например, загрузки, обмен данными или бэкапы), этот скрипт поможет вести лог всех изменений.

⚙️ Исходный код

#!/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 сравнивает текущее и предыдущее состояния
🟢 Удобно использовать для мониторинга папок обмена, логов, загрузок и т.д.

➡️ Добавьте в crontab для регулярного сканирования:
*/15 * * * * /path/to/watch_new_files.sh


🗣 Подходит для систем, где важно знать, что и когда появилось — например, при интеграции с внешними источниками данных.


😎 PyLinux | #scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13
🔁 Автоматическая проверка и перезапуск зависших systemd-сервисов в Linux

Иногда 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 проверяет, работает ли служба
🟢 Автоматический перезапуск помогает поддерживать непрерывность работы
🟢 Удобен для nginx, postgresql, celery, flask-сервисов и пр.

➡️ Добавьте в crontab для регулярного мониторинга (например, каждые 10 минут):
*/10 * * * * /path/to/service_healthcheck.sh


🗣 Особенно полезен на серверах без полноценного мониторинга (Prometheus, Zabbix) или в односерверных проектах.


😎 PyLinux | #scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤‍🔥4
🧪 Проверка целостности бинарников и конфигураций в Linux

Иногда важные системные файлы могут быть случайно или намеренно изменены. Этот скрипт помогает выявить изменения в бинарниках, конфигурациях и других критичных файлах с помощью встроенного механизма 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 ограничивает проверку только конфигурационными файлами.

➡️ Добавьте в crontab для регулярной проверки:
@daily /path/to/integrity_check.sh


🗣 Подходит для серверов, критичных к стабильности и безопасности — например, bastion-хостов, шлюзов или CI/CD-инфраструктуры.


😎 PyLinux | #scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
🧼 Автоматическая очистка старых логов в Linux

На серверах со временем накапливается множество лог-файлов, особенно в /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 и других демонов.

➡️ Добавьте в crontab для регулярной очистки:
0 3 * * * /path/to/log_cleanup.sh


🗣 Особенно полезен на прод-серверах с большим объёмом логов, где logrotate не всегда охватывает все случаи.


😎 PyLinux | #scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥10👍3
🧰 Проверка подключения к удалённым хостам через список в Linux

Если вы работаете с несколькими серверами, сервисами или 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"


✔️ Пример содержимого /etc/hostlist.txt:

8.8.8.8
example.com
192.168.1.1


🟢 Поддержка произвольного списка IP/доменов
🟢 Простая настройка — достаточно отредактировать hostlist.txt
🟢 Пишет лог с результатами — можно подключить мониторинг.

➡️ Добавьте в crontab для регулярной проверки:
*/15 * * * * /path/to/ping_hosts.sh


🗣 Подходит для DevOps-инфраструктуры, сетевых администраторов и всех, кто работает с десятками хостов или микросервисов.


😎 PyLinux | #scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤‍🔥3
🖨 Мониторинг очередей печати в Linux (CUPS)

Если вы администрируете офисную инфраструктуру или домашний сервер печати, важно следить за состоянием очередей: зависшие задания, неработающие принтеры или накопившиеся задания могут мешать пользователям. Этот скрипт проверяет статус 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 проверяет активные задания в очереди
🟢 Скрипт логирует результаты — удобно для последующего анализа или автоматизации.

➡️ Добавьте в crontab для периодической проверки:
*/10 * * * * /path/to/print_monitor.sh


🗣 Особенно полезен для серверов печати, Raspberry Pi-принтшлюзов и офисных станций с несколькими принтерами.


😎 PyLinux | #scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
🖥 Автоматическая проверка и логирование X-сессий в Linux

Если вы хотите знать, кто использует графическую оболочку, когда были последние 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 и т.д.)
🟢 Логирование состояния X-сессий удобно для аудита GUI-активности
🟢 Поддерживает большинство стандартных оконных менеджеров: Xfce, GNOME, KDE и др.

➡️ Добавьте в crontab для периодической проверки:
*/15 * * * * /path/to/xsession_monitor.sh


🗣 Особенно полезен в образовательных или терминальных средах, где важно отслеживать использование GUI.


😎 PyLinux | #scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤‍🔥2🌚2
✉️ Автоматическая проверка наличия обновлений пакетов в Linux (APT)

Если вы администрируете сервер или рабочую станцию на 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"


🟢 apt update обновляет кэш пакетов
🟢 apt list --upgradable показывает, что требует обновления
🟢 Скрипт можно запускать вручную, по cron или в systemd таймере
🟢 Удобен для ведения истории обновлений или уведомлений через email/Telegram

➡️ Добавьте в crontab для ежедневной проверки:
0 6 * * * /path/to/apt_update_check.sh


🗣 Идеально подходит для серверов без автоматических обновлений — вы будете знать, когда что-то требует вмешательства.


😎 PyLinux | #scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥3
🧰 Мониторинг использования swap в Linux

Использование 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
🟢 Скрипт логирует превышения порога — можно подключить к email/телеграм-уведомлениям
🟢 Удобен для серверов с ограниченной ОЗУ или подозрением на утечки памяти

➡️ Добавьте в crontab для ежедневной проверки:
*/30 * * * * /path/to/swap_monitor.sh


🗣 Подходит для администраторов, DevOps-инженеров и всех, кто следит за стабильностью и производительностью системы.


😎 PyLinux | #scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥9👍4🔥1
🧼 Автоматическое удаление неиспользуемых APT-пакетов в Linux

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

⚙️ Исходный код

#!/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 очищает только устаревшие архивы, которые уже недоступны в репозиториях

➡️ Добавьте в crontab для еженедельной очистки:
0 4 * * 0 /path/to/apt_cleanup.sh


🗣 Отлично подходит для серверов и рабочих машин, где важно держать систему в чистоте без ручной рутины.


😎 PyLinux | #scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥7👍5
🧠 Проверка доступности ОЗУ и логирование пикового использования в Linux

Мониторинг доступной оперативной памяти помогает вовремя обнаружить утечки, перегрузки и определить, какие задачи съедают ресурсы.

Этот скрипт проверяет доступную память, логирует предупреждения и может использоваться для базового анализа производительности.

⚙️ Исходный код

#!/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 и т.д

➡️ Добавьте в crontab для периодического мониторинга:
*/15 * * * * /path/to/mem_monitor.sh


🗣 Особенно полезен для серверов, рабочих станций с ограниченным объёмом ОЗУ, VPS и embedded-устройств.


😎 PyLinux | #scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
🔐 Проверка и логирование изменений в sudoers и ключевых системных файлах

Контроль за критичными файлами — важная мера безопасности. Этот скрипт отслеживает изменения в 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 проверяет целостность без лишнего шума
🟢 Работает на любых системах без стороннего ПО
🟢 Можно расширить список файлов, подключить e-mail/Telegram для уведомлений

➡️ Добавьте в crontab для ежедневной проверки:
@daily /path/to/security_watch.sh


🗣 Полезно для серверов, рабочих станций с несколькими пользователями, CI/CD-агентов — чтобы быстро реагировать на подозрительные изменения.


😎 PyLinux | #scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
🔐 Проверка выхода из строя systemd-сервисов в Linux

Многие фоновые службы в 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 показывает службы с ошибками
🟢 Удобно логировать и подключить в cron для регулярной проверки
🟢 Можно дополнить email/TG-уведомлениями для быстрого реагирования

➡️ Добавьте в crontab:
*/30 * * * * /path/to/systemd_check.sh


🗣 Подходит для серверов, рабочих станций, CI-сред — чтобы быть в курсе, если что-то важное перестало работать (например, ssh, cron, nginx, docker, postgres и др.).


😎 PyLinux | #scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
🔐 Анализ повторных перезапусков systemd-сервисов в Linux

Службы, которые часто перезапускаются, могут перегружать систему или указывать на скрытые проблемы (утечки памяти, падения, ошибки конфигурации). Этот скрипт ищет 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) можно адаптировать под систему

➡️ Добавьте в crontab:
*/20 * * * * /path/to/systemd_restart_watch.sh


🗣 Особенно полезно для DevOps-инженеров, системных админов, SRE-команд — когда важно не просто знать, что сервис упал, а выявить нестабильные процессы до сбоя


😎 PyLinux | #scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
🧩 Мониторинг зависших процессов в Linux (на основе времени выполнения)

В 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, время жизни процесса (в секундах) и его команду
🟢 Сравниваем с порогом (по умолчанию 60 минут)
🟢 Скрипт удобен для поиска подвисших cron-задач, rsync, python-скриптов и др.
🟢 Можно доработать: исключить сервисы, логин-сессии, добавить автоубийство (kill)

➡️ Добавьте в crontab:
*/30 * * * * /path/to/stuck_process_monitor.sh


🗣 Полезно для CI/CD, серверов, рабочих станций и всех, где важна своевременная очистка висящих задач


😎 PyLinux | #scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
📈 Мониторинг резкого роста использования памяти процессами в Linux

Иногда процессы начинают резко “есть” больше оперативной памяти (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) с порогом в MB
🟢 Удобно для поиска “прожорливых” приложений (Java, Python, Node.js и др.)
🟢 Можно дополнить автоуведомлением или kill проблемных процессов

➡️ Добавьте в crontab:
*/15 * * * * /path/to/memory_spike_monitor.sh


🗣 Особенно полезно для серверов, CI/CD-агентов и рабочих станций с ограниченной RAM


😎 PyLinux | #scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
🚨 Контроль открытых подключений к MySQL в Linux

Непредвиденное увеличение числа подключений к 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' — показывает число активных соединений
🟢 Скрипт можно запускать раз в 5–15 минут для мониторинга
🟢 Логи можно анализировать, подключить уведомления через Telegram/Slack
🟢 Порог можно адаптировать под рабочую нагрузку

➡️ Добавьте в crontab:
*/10 * * * * /path/to/mysql_conn_watch.sh


🗣 Полезно для админов баз данных, DevOps-инженеров и всех, кто работает с веб-сервисами и нагруженными БД


😎 PyLinux | #scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍2
🔌 Мониторинг изменений подключённых USB-устройств в Linux

Подключение или отключение 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-устройства
🟢 Сравниваем с предыдущим состоянием и фиксируем изменения
🟢 Можно подключить уведомления в Telegram/Slack при изменении

➡️ Добавьте в crontab:
* * * * * /path/to/usb_monitor.sh


🗣 Полезно для DevOps, системных админов и специалистов по безопасности, чтобы отслеживать физические подключения к системе


😎 PyLinux | #scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍4
🔏 Мониторинг срока истечения TLS-сертификатов в Linux

Истекающие 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)

➡️ Добавьте в crontab для ежедневной проверки:
0 8 * * * /path/to/tls_expiry_check.sh


🗣 Подходит для прод-сервисов, внутренних API и доменов — чтобы не словить внезапный 526/495 из-за просроченного сертификата


😎 PyLinux | #scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥8👍4
🗑Обнаружение процессов с «удалёнными, но занятыми» файлами в Linux

Частая причина «внезапно заполненного диска»: лог-файл удалили или ротировали, а процесс всё ещё держит его открытым. Пространство не освобождается, пока дескриптор не закрыт.

Этот скрипт находит такие случаи и логирует крупные «висящие» файлы.


⚙️ Исходный код

#!/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"


🟢 Находит «висящие» (deleted) файлы, которые удерживают место
🟢 Помогает выявить неправильно настроенный logrotate/процессы без перезапуска
🟢 Есть безопасная (закомментированная) опция обнуления дескриптора через /proc/PID/fd/N

➡️ Добавьте в crontab для регулярной проверки:
*/15 * * * * /path/to/open_deleted_watch.sh


🗣 Полезно для прод-серверов с активным логированием (nginx, app-сервисы), где «пропавшее» место — частая головная боль.


😎 PyLinux | #scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥12🔥2