Полезные скрипты для сисадминов: 15 решений для автоматизации
Содержание статьи
- Скрипты для мониторинга серверов и сети
- Проверка доступности узлов
- Нагрузка на диск и память
- Сетевые соединения
- Автоматический контроль нагрузки CPU и памяти
- Скрипт проверки доступности хостов и портов
- Мониторинг дискового пространства с уведомлением в Telegram
- Скрипты для резервного копирования и синхронизации
- Инкрементальный бэкап баз данных MySQL и PostgreSQL
- Синхронизация файлов между серверами по rsync
- Ротация старых резервных копий с автоматической очисткой
- Скрипты для автоматизации рутинных задач администрирования
- Резервное копирование и синхронизация
- Мониторинг состояния системы
- Управление пользователями и правами
- Очистка логов и временных данных
- Массовое создание пользователей и настройка прав доступа
- Автоматическая установка обновлений безопасности в нерабочее время
- Скрипт очистки временных файлов и кэша системы
- Скрипты для анализа логов и диагностики сбоев
- Поиск ошибок в системных журналах за последние сутки
- Анализ логов веб-сервера для выявления подозрительных запросов
- Скрипт сбора диагностической информации перед обращением в поддержку
- Скрипты для управления службами и процессами
- Автоматический перезапуск зависших сервисов по расписанию
- Контроль запущенных процессов и завершение аварийных задач
- Скрипт планового перезапуска веб-сервера без потери соединений
- Скрипты для сетевой безопасности и защиты
- Автоматическое добавление IP-адресов в блокировку при brute-force атаках
- Проверка открытых портов и закрытие неиспользуемых служб
- Скрипт сканирования сети на наличие новых устройств
Скрипты для мониторинга серверов и сети
Начнём с практической ценности: полезные скрипты для сисадминов экономят часы ручной работы. Вместо того чтобы вглядываться в дашборды, проще автоматизировать проверку ключевых метрик. Ниже — несколько рабочих вариантов, которые реально упрощают жизнь.
Проверка доступности узлов
Банальный, но действенный подход — цикл с ping или nc. Такой инструмент прогоняется по списку хостов из файла и выдаёт отчёт о недоступных. Удобно запускать его по расписанию через cron.
Нагрузка на диск и память
Следить за заполнением разделов помогает однострочник с df -h и awk. Он отфильтрует тома, где занято больше 80%, и отправит предупреждение в Telegram или на почту. Аналогично — с free -m для оперативной памяти.
Сетевые соединения
Для быстрой диагностики пригодится подсчёт установленных TCP-соединений по портам. Это позволяет вовремя заметить аномалии, например, подозрительную активность или исчерпание пула соединений.
| Скрипт | Назначение | Типичный запуск |
|---|---|---|
| ping-сканер | Контроль доступности хостов | каждые 5 минут |
| df-монитор | Отслеживание места на дисках | раз в час |
| ss-анализатор | Просмотр активных соединений | по требованию |
Главное — не усложнять. Небольшой набор утилит на Bash или Python закрывает большинство повседневных задач без тяжёлых систем мониторинга.
Автоматический контроль нагрузки CPU и памяти
Мониторинг ресурсов вручную — удел мазохистов. Проще доверить наблюдение скрипту, который сам зафиксирует аномалии. Например, простая конструкция на bash снимает показания через top или vmstat и пишет их в лог-файл с меткой времени. Если загрузка процессора стабильно превышает 90% дольше пяти минут — срабатывает триггер на отправку уведомления в Telegram. Для памяти порог обычно ниже: 80–85% занятого объёма уже повод проверить, не утёк ли процесс. Подобный инструмент удобно запускать через cron каждые пять минут, чтобы иметь историю для последующего анализа.
Скрипт проверки доступности хостов и портов
Для быстрой диагностики сети удобно использовать bash-скрипт, который опрашивает список адресов через nc -z -w или timeout с /dev/tcp. Такой подход позволяет за пару секунд выявить недоступный сервис, не прибегая к тяжёлым мониторинговым системам. Ниже — простой пример цикла, который проверяет связку «IP:порт» и пишет результат в лог.
#!/bin/bash
while read host port; do
if timeout 2 bash -c "echo >/dev/tcp/$host/$port" 2>/dev/null; then
echo "$host:$port доступен"
else
echo "$host:$port не отвечает"
fi
done < hosts.txt
Для параллельной проверки множества адресов удобнее использовать xargs -P — это заметно ускоряет работу при больших списках. Утилита nmap тоже справляется, но её не всегда разрешено ставить на машины.
Мониторинг дискового пространства с уведомлением в Telegram
Когда место на сервере заканчивается внезапно, это всегда неприятный сюрприз. Автоматический контроль свободных гигабайтов избавляет от ручной проверки каждой машины. Простейший bash-сценарий, запускаемый по cron, способен оповестить о критическом заполнении тома.
Логика работы элементарна: скрипт сверяет процент использования с пороговым значением (например, 85%) и при превышении шлёт сообщение через Bot API. Удобно, что не нужен отдельный почтовый сервер — только токен бота и chat_id получателя.
#!/bin/bash
THRESHOLD=85
TOKEN="ваш_токен"
CHAT_ID="ваш_id"
df -h | awk 'NR>1 {gsub("%","",$5); if ($5 > '"$THRESHOLD"') print $1, $5}' | while read line; do
curl -s -X POST "https://api.telegram.org/bot$TOKEN/sendMessage" \
-d chat_id="$CHAT_ID" -d text="Внимание: $line занято на сервере"
done
Для исключения ложных срабатываний стоит добавить фильтр по файловой системе, игнорируя tmpfs и overlay. В cron запись выглядит так: 0 * * * * /usr/local/bin/disk_alert.sh — проверка каждый час. При желании порог можно сделать параметром командной строки, чтобы разные хосты использовали свои настройки.
Скрипты для резервного копирования и синхронизации
Автоматизация сохранности данных — базовая задача любого администратора. Вместо ручного копирования удобнее применять небольшие утилиты, которые запускаются по расписанию через cron или планировщик Windows. Например, простая команда rsync с флагом -a --delete зеркалирует каталоги, а borgbackup позволяет хранить дедуплицированные снапшоты с шифрованием. Для синхронизации между серверами часто используют lsyncd, отслеживающий изменения в реальном времени. Ниже — пара практичных примеров.
- Бэкап базы данных PostgreSQL с ротацией:
pg_dump | gzip > /backup/$(date +%F).sql.gzи удаление архивов старше 14 дней черезfind. - Синхронизация конфигов с удалённым хостом:
rsync -avz -e ssh /etc/nginx/ user@backup:/backup/nginx/.
Инкрементальный бэкап баз данных MySQL и PostgreSQL
Для регулярного резервирования изменений удобно использовать утилиты mysqlbinlog и pg_basebackup в связке с WAL-архивированием. Первая фиксирует бинарные логи, вторая создаёт согласованную копию кластера. Автоматизировать процесс можно через cron, а проверку целостности — скриптом с CHECKSUM TABLE.
Синхронизация файлов между серверами по rsync
Для зеркалирования каталогов между хостами удобно применять rsync в связке с SSH. Утилита передаёт только изменённые блоки, что экономит трафик и время. Типовой вызов выглядит так: rsync -avz --delete /путь/ user@host:/цель/. Флаг --delete убирает лишние файлы на приёмнике, а -z включает сжатие. Для автоматизации добавьте задание в cron, но не забудьте настроить ключи доступа, чтобы пароль не вводился вручную.
Ротация старых резервных копий с автоматической очисткой
Хранение бэкапов без системы — это хаос. Рано или поздно диск заполняется, и свежие снимки некуда писать. Решается проблема скриптом, который удаляет устаревшие архивы по расписанию.
Логика проста: оставляем N последних копий, остальное стираем. Например, для ежедневных бэкапов достаточно держать 14 штук. Для еженедельных — 8. Всё, что старше, подлежит удалению.
Вот пример на Bash:
#!/bin/bash
BACKUP_DIR="/var/backups"
KEEP=14
find "$BACKUP_DIR" -type f -name "*.tar.gz" -mtime +$KEEP -delete
Команда find находит файлы старше 14 дней и удаляет их. Для ежемесячных архивов лучше использовать другой каталог и отдельный таймер в cron.
Важный нюанс: проверяйте, что скрипт не затронет свежие файлы. Тест с флагом -exec echo вместо -delete поможет избежать случайного удаления нужного.
Скрипты для автоматизации рутинных задач администрирования
Монотонная работа отнимает часы, которые можно потратить на развитие инфраструктуры. Автоматизация превращает повторяющиеся операции в набор выполняемых команд. Ниже — подборка полезных решений, проверенных на практике.
Резервное копирование и синхронизация
Сохранность данных — базовая потребность любой организации. Вместо ручного копирования файлов по расписанию удобнее использовать сценарии, которые сами запускаются в нужное время.
- Инкрементальное копирование с помощью rsync — переносит только изменённые блоки, экономя трафик и дисковое пространство. Скрипт можно запускать через cron каждую ночь.
- Синхронизация с удалённым сервером по SSH — использует шифрованный канал, что исключает перехват данных при передаче.
- Архивация с ротацией — хранит последние N копий, удаляя устаревшие. Это предотвращает переполнение диска.
Мониторинг состояния системы
Проактивный контроль позволяет заметить проблему до того, как она станет критичной. Небольшие программы на Bash или Python способны отслеживать ключевые метрики.
| Метрика | Команда/инструмент | Действие при срабатывании |
|---|---|---|
| Загрузка CPU | top, mpstat | Отправка уведомления в Telegram |
| Свободное место на диске | df -h | Очистка временных файлов |
| Доступность сервиса | curl, nc | Перезапуск службы |
Управление пользователями и правами
При массовом приёме сотрудников создание учётных записей вручную — утомительное занятие. Пакетная обработка через скрипт сокращает время с нескольких часов до пары минут. Достаточно подготовить CSV-файл с данными, а программа сама создаст логины, задаст временные пароли и настроит домашние каталоги.
Очистка логов и временных данных
Журналы системных событий разрастаются стремительно. Без регулярной очистки они заполняют весь раздел, вызывая сбои в работе приложений. Автоматизированная ротация сжимает старые записи и удаляет те, что старше заданного периода. Это поддерживает стабильную работу без вмешательства администратора.
Грамотно написанные сценарии — это инвестиция в стабильность. Они освобождают ресурсы для решения действительно сложных задач, требующих живого участия специалиста.
Массовое создание пользователей и настройка прав доступа
Когда сотрудников десятки, а то и сотни, ручная возня с каждым аккаунтом превращается в ад. Выручает цикл for в bash, читающий список из CSV. Скрипт генерирует логины, задаёт временные пароли и сразу шлёт приветственное письмо через mail. Права удобно раздавать через группы: добавил человека в www-data — и он уже работает с веб-сервером. Для отзыва доступа достаточно одной команды usermod, а не правки десятка конфигов.
Автоматическая установка обновлений безопасности в нерабочее время
Патчи критических уязвимостей лучше ставить ночью, когда нагрузка на сервисы минимальна. Для этого подходит планировщик cron и скрипт, который проверяет наличие апдейтов и запускает их установку в заданный час. В Debian-подобных системах удобно использовать unattended-upgrades, но для гибкого контроля расписания пишут собственный bash-сценарий.
Пример логики:
- проверка времени суток;
- блокировка запуска при активных пользователях;
- запись логов в отдельный файл;
- отправка уведомления в Telegram после перезагрузки.
Такой подход снижает риск простоя и не мешает работе днём.
Скрипт очистки временных файлов и кэша системы
Для освобождения места на диске удобно применять небольшую утилиту, которая удаляет мусор из стандартных каталогов. Ниже — пример для Linux-окружения.
- Очистка
/tmpи/var/tmpот объектов старше 3 дней. - Сброс кэша пакетного менеджера (apt, yum, dnf) с сохранением логов.
- Удаление миниатюр и эскизов в
~/.cache/thumbnails.
Запуск по расписанию через cron избавляет от ручного вмешательства. Важно проверять права доступа и не трогать файлы, используемые активными процессами.
Скрипты для анализа логов и диагностики сбоев
Разбор журналов событий — рутина, отнимающая часы. Автоматизация тут спасает: пара строк на Bash способна вытащить из вороха записей зерно проблемы. Например, однострочник, фильтрующий строки по уровню критичности за последние сутки, часто оказывается полезнее полноценного SIEM.
Для диагностики внезапных падений сервисов удобно использовать комбинацию утилит: journalctl собирает данные, а awk или grep выделяют аномалии. Ниже — пара практичных примеров, которые легко адаптировать под свою среду.
| Задача | Инструмент | Результат |
|---|---|---|
| Поиск повторяющихся ошибок | sort + uniq -c | Список частотных сбоев |
| Мониторинг времени ответа | tail + awk | Средняя задержка за окно |
Главное — не пытаться объять необъятное: скрипт, решающий одну конкретную задачу, ценнее универсальной «швейцарской пилы».
Поиск ошибок в системных журналах за последние сутки
Когда что-то ломается, первым делом смотришь в логи. Но выудить нужное из сотен строк — та ещё морока. Выручает однострочник на базе journalctl:
journalctl --since "24 hours ago" -p err --no-pager | grep -v "audit\|NetworkManager" | sort | uniq -c | sort -rn | head -30
Что здесь происходит:
-p err— отсекаем всё, кроме ошибок и критических событий;grep -v— убираем шумные источники вроде аудита;uniq -c— группируем повторяющиеся записи и считаем их количество.
Результат — топ повторяющихся сбоев с частотой появления. Сразу видно, что сыпется чаще всего. Для старых дистрибутивов с rsyslog подойдёт связка grep и awk по файлу /var/log/messages за вчерашний день. Работает чуть медленнее, но суть та же.
Анализ логов веб-сервера для выявления подозрительных запросов
Ручной просмотр access-файлов отнимает часы, поэтому стоит автоматизировать поиск аномалий. Простой awk-скрипт фильтрует записи по кодам ответа 401, 403 и 500, а также отсекает обращения к служебным путям вроде /wp-admin или /.env. Дополнительно можно группировать строки по IP-адресу и подсчитывать частоту обращений — так выявляются переборщики паролей и сканеры уязвимостей.
- Собирайте статистику по user-agent, чтобы отсеять ботов.
- Сверяйте подозрительные адреса с публичными blacklist-базами.
- Настраивайте уведомление в Telegram при превышении порога.
Скрипт сбора диагностической информации перед обращением в поддержку
Когда инцидент требует вмешательства техподдержки, тянуть время на переписку не хочется. Гораздо эффективнее заранее подготовить пакет данных о состоянии системы. Небольшой bash-скрипт способен автоматизировать рутину: он собирает вывод dmesg, логи ядра, сведения об использовании диска и памяти, список процессов. Всё это упаковывается в архив с меткой времени. Такой подход сокращает диалог до одного сообщения и ускоряет диагностику.
Скрипты для управления службами и процессами
Мониторинг демонов и фоновых задач — рутина, которую легко автоматизировать. Вместо ручного ввода systemctl или kill удобнее применять небольшие утилиты, которые сами проверяют статус и перезапускают упавшие сервисы.
Вот несколько рабочих вариантов для повседневных задач:
- Проверка активного состояния конкретной службы через systemd и запись результата в лог.
- Автоматический рестарт зависшего процесса по таймауту или по отсутствию ответа на ping.
- Скрипт-сторож, который следит за PID-файлом и поднимает демон заново, если тот завершился с ошибкой.
Полезно добавить в такой инструмент отправку уведомления в Telegram или на почту, чтобы знать о сбое сразу, а не при взгляде на мониторинг.
Автоматический перезапуск зависших сервисов по расписанию
Когда служба перестаёт отвечать, ждать ручного вмешательства не всегда разумно. Надёжнее доверить контроль cron’у. Пара строк в планировщике способна заменить дежурного специалиста в ночную смену.
Простейший вариант проверки — утилита pgrep в связке с systemctl. Логика такая: если процесс не найден, выполняем перезапуск и пишем событие в лог.
#!/bin/bash
if ! pgrep -x "nginx" > /dev/null; then
systemctl restart nginx
echo "$(date) nginx перезапущен" >> /var/log/service_restarts.log
fi
Для более тонкой настройки удобно использовать systemd-таймеры вместо классического crontab. Они позволяют задать точное время старта и устойчивы к пропуску запусков после простоя машины.
Важно помнить о «ложных срабатываниях»: процесс может висеть, но не отвечать на запросы. Тогда стоит проверять не наличие PID, а доступность порта или HTTP-код ответа.
Контроль запущенных процессов и завершение аварийных задач
Когда сервер начинает «тормозить», первым делом смотрят на список активных задач. Для быстрой диагностики удобно использовать однострочные команды, которые сразу показывают самых прожорливых потребителей памяти или CPU. Например, вывод с сортировкой по нагрузке позволяет мгновенно обнаружить аварию.
Если процесс завис и не реагирует на обычные сигналы, применяют принудительное завершение. Полезно держать под рукой скрипт, который не только убивает задачу по имени, но и записывает событие в лог. Это помогает позже разобраться, что пошло не так.
- Проверка состояния по PID или имени.
- Автоматический перезапуск упавших служб.
- Очистка «зомби»-процессов.
Скрипт планового перезапуска веб-сервера без потери соединений
Для аккуратной перезагрузки nginx или Apache применяется двухфазный подход: сначала процесс получает сигнал о завершении новых подключений, затем — о graceful-остановке старых воркеров. В системах с systemd удобно использовать команду systemctl reload, которая не рвёт активные сессии, а лишь перечитывает конфигурацию. Если требуется полный рестарт, проверьте таймауты в юнитах и добавьте проверку nginx -t перед перезапуском, чтобы избежать простоя из-за синтаксической ошибки.
Скрипты для сетевой безопасности и защиты
Для мониторинга подозрительной активности пригодится анализатор логов fail2ban. Он автоматически блокирует IP-адреса после нескольких неудачных попыток входа. Дополнительно стоит настроить уведомления о новых подключениях к SSH через Telegram-бота — это займёт не больше десяти минут.
Полезные инструменты для быстрой проверки:
- Сканер открытых портов на основе netcat;
- Скрипт сверки контрольных сумм критичных бинарников;
- Парсер access-логов веб-сервера для выявления аномалий.
Регулярный аудит конфигурации межсетевого экрана помогает вовремя заметить ослабление политик. Автоматизируйте резервное копирование правил iptables перед каждым изменением.
Автоматическое добавление IP-адресов в блокировку при brute-force атаках
Перебор паролей по SSH — частая головная боль. Вручную банить подсети утомительно, поэтому проще доверить это скрипту. Он анализирует логи за последние 10 минут, вычленяет адреса с тремя и более неудачными попытками входа и отправляет их в iptables или fail2ban. Ниже — примерная логика работы.
- Чтение journalctl или /var/log/auth.log.
- Фильтрация строк с ошибками аутентификации.
- Сравнение с чёрным списком, чтобы не дублировать записи.
- Добавление правила с временной меткой для автоочистки.
Такой подход снимает рутину и снижает риск пропустить атаку. Главное — не забыть про ротацию логов и тестирование на тестовом стенде.
Проверка открытых портов и закрытие неиспользуемых служб
Для быстрой инвентаризации сетевых ресурсов удобно применять утилиту ss с флагом -tulpn. Она покажет все слушающие сокеты и связанные с ними процессы. Лишние сервисы вроде ненужного CUPS или устаревшего FTP стоит отключить через systemctl disable --now. Периодический аудит снижает поверхность атаки.
Скрипт сканирования сети на наличие новых устройств
Контроль за подключениями к локальной инфраструктуре — базовая гигиена. Простой bash-вариант с утилитой nmap позволяет фиксировать изменения в списке активных хостов. Алгоритм: сохраняем эталонный список, затем сравниваем с текущим выводом сканера. Разницу отправляем в лог или Telegram. Для исключения ложных срабатываний стоит добавить фильтр по MAC-адресам и таймаут ожидания ответа.