5 скриптов Bash, которые я использую ежедневно как системный администратор Linux
Дата публикации: 2025-07-01T09:33:05
Теги: ["Bash", "script"]
Если вы хоть немного управляли системами Linux, вы уже знаете, насколько повторяющимися и времязатратными могут быть некоторые задачи. Будь то проверка дискового пространства, перезапуск проблемных служб или поддержание вашей системы в актуальном состоянии, выполнение всего вручную быстро становится головной болью, особенно если вы управляете более чем одним сервером.
В этой статье вы узнаете о пяти простых, но мощных Bash-скриптах, которые полезны в повседневном администрировании систем Linux. Эти скрипты подходят для начинающих и легко модифицируются под ваше окружение.
1. Скрипт мониторинга дискового пространства
Одна из самых распространенных проблем на серверах Linux - это нехватка дискового пространства. Логи заполняют пространство, резервные копии растут, и вдруг ваше приложение вылетает, потому что на сервере недостаточно места. Вот почему мой первый скрипт проверяет использование диска и отправляет предупреждение, если использование превышает установленный лимит (скажем, 80%).
#!/bin/bash
THRESHOLD=80
EMAIL="[email protected]"
df -hP | grep -vE '^Filesystem|tmpfs|cdrom' | while read line; do
USAGE=$(echo $line | awk '{print $5}' | sed 's/%//')
MOUNTPOINT=$(echo $line | awk '{print $6}')
if [ $USAGE -ge $THRESHOLD ]; then
echo "Warning: High disk usage on $MOUNTPOINT ($USAGE%)" | mail -s "Disk Alert: $HOSTNAME" $EMAIL
fi
done
curl -H "Title:Мониторинг дискового пространства" -H "Priority: high" -d "Предупреждение: Высокое использование диска" https://ntfy.example.com/server-monitoring
Этот скрипт проверяет каждую партицию, и если какая-либо из них превышает порог в 80%, я получаю электронное письмо, а также push-сообщение в ntfy. Это помогает мне решить проблемы до того, как они станут серьезными. Я запускаю этот скрипт через cron каждые 6 часов.
2. Скрипт автоматизации обновления системы
Поддержание систем в актуальном состоянии имеет критическое значение, особенно для исправлений безопасности. Я использую этот простой Bash-скрипт для автоматического обновления пакетов, очистки системы и отправки мне отчета.
#!/bin/bash LOGFILE="/var/log/sys-updates-$(date +%F).log" EMAIL="[email protected]" echo "Starting updates on $(date)" >> $LOGFILE apt update && apt upgrade -y >> $LOGFILE 2>&1 apt autoremove -y >> $LOGFILE 2>&1 tail -20 $LOGFILE | mail -s "System Update Report: $HOSTNAME" $EMAIL curl -H "Title:Автоматическое обновление системы" -H "Priority: high" -d "Запуск обновлений" https://ntfy.example.com/server-monitoring
(Для пользователей RHEL/CentOS просто замените apt на yum или dnf команды.)
Запуск этого скрипта через cron каждую день позволяет мне поддерживать мои системы в актуальном состоянии и чистоте. Ежедневный отчет по электронной почте, а также push-сообщение в ntfy дает мне уверенность в том, что все прошло гладко. Если что-то сломается, я могу проверить журнал и откатить изменения.
3. Скрипт проверки состояния сервиса
В качестве системного администратора я должен знать, если ключевые сервисы, такие как Apache, Nginx или MySQL, перестают работать. Этот скрипт проверяет, запущена ли конкретная служба, и, если нет, перезапускает ее и уведомляет меня.
#!/bin/bash
SERVICES=("apache2" "mysql")
EMAIL="[email protected]"
for SERVICE in "${SERVICES[@]}"; do
if ! systemctl is-active --quiet $SERVICE; then
systemctl start $SERVICE
echo "$SERVICE was down and has been restarted on $HOSTNAME" | mail -s "Service Restart Alert" $EMAIL
fi
done
curl -H "Title:Проверка состояния сервиса" -H "Priority: high" -d "был отключен и был перезапущен" https://ntfy.example.com/server-monitoring
Этот скрипт проверяет их каждые 5 минут с помощью cron. Если какой-либо сервис не работает, он автоматически перезапускает его и отправляет мне по электронной почте, а также push-сообщение в ntfy.
4. Скрипт резервного копирования важных файлов
Резервные копии скучны, пока они не понадобятся. У меня есть пользовательский сценарий Bash, который создает резервные копии моих критически важных файлов (таких как веб-файлы, базы данных, конфигурационные файлы) и хранит их в сжатом архиве.
#!/bin/bash BACKUP_DIR="/backup" SOURCE_DIRS="/etc /var/www /home" DATE=$(date +%F) BACKUP_FILE="$BACKUP_DIR/backup-$DATE.tar.gz" EMAIL="[email protected]" tar -czf $BACKUP_FILE $SOURCE_DIRS if [ $? -eq 0 ]; then echo "Backup completed successfully: $BACKUP_FILE" | mail -s "Backup Success - $HOSTNAME" $EMAIL else echo "Backup FAILED!" | mail -s "Backup Failed - $HOSTNAME" $EMAIL fi curl -H "Title:Резервное копирование важных файлов" -H "Priority: high" -d "Успех резервного копирования" https://ntfy.example.com/server-monitoring
У меня были случаи, когда пользователи случайно удаляли важные данные, и этот скрипт спасал меня не раз. Я храню резервные копии за 7 дней и чередую их с другим скриптом для очистки. Вы также можете загрузить резервные копии на удаленный сервер или облачное хранилище для большей безопасности. Уведомляет по электронной почте, а также push-сообщение в ntfy.
5. Скрипт мониторинга входа пользователя
Этот скрипт проверяет активность входа пользователей и уведомляет вас, если кто-то входит в систему, что особенно полезно, если вы управляете производственными серверами и хотите отслеживать доступ.
#!/bin/bash
LOGFILE="/var/log/auth-$(date +%F).log"
LAST_RUN_FILE="/tmp/last_run_time"
EMAIL="[email protected]"
if [ ! -f $LAST_RUN_FILE ]; then
date --date='5 minutes ago' +%s > $LAST_RUN_FILE
fi
LAST_RUN=$(cat $LAST_RUN_FILE)
NOW=$(date +%s)
awk -v last=$LAST_RUN -v now=$NOW '
$0 ~ /session opened for user/ {
cmd = "date -d \""$1" "$2" "$3"\" +%s"
cmd | getline t
close(cmd)
if (t >= last && t <= now) { print $0 } } ' $LOGFILE | mail -s "Login Alert - $HOSTNAME" $EMAIL echo $NOW > $LAST_RUN_FILE
curl -H "Title:Мониторинг входа пользователя" -H "Priority: high" -d "Пользователь входит в систему" https://ntfy.example.com/server-monitoring
Этот скрипт помогает мне узнать, кто получил доступ к серверу и когда. Он отлично подходит для обнаружения необычных паттернов доступа. Вы можете расширить его, чтобы блокировать IP-адреса или вызывать тревогу, если это необходимо. Уведомляет по электронной почте, а также push-сообщение в ntfy.
Автоматизация с помощью Cron
Расписания `cron` хранятся в файле с именем crontab. Типичная запись crontab начинается с пяти значений (или звездочек), за которыми следует команда. Значения сообщают `cron`, когда выполнять команду, а звездочка означает «все».
* * * * * команда, которая должна быть выполнена - - - - - | | | | | | | | | ----- День недели (0 - 7) (воскресенье = 0 или 7) | | | ------- Месяц (1 - 12) | | --------- День месяца (1 - 31) | ----------- Час (0 - 23) -------------- Минута (0 - 59)
Чтобы отредактировать crontab, выполните:
$ sudo crontab -e
И добавьте строку:
0 3 * * * /usr/local/bin/bash_scripts.sh
Это запланирует `cron` для запуска команды в 3:00, каждый день любого месяца.
Убедитесь, что сценарий имеет исполняемые разрешения.
Настройка почты
Если вы хотите получить отчет по электронной почте, убедитесь, что ваш сервер может отправлять почту – на большинстве систем достаточно просто установить mailutils.
$ sudo apt install mailutils -y [On Debian/Ubuntu] $ sudo dnf install mailx -y [On CentOS/RHEL]
Вам также может понадобиться настроить Postfix или SSMTP для корректной пересылки электронной почты, особенно если вы находитесь на облачной виртуальной машине.
Завершение
Эти скрипты могут показаться простыми на первый взгляд, но они выполняют критически важные задачи, которые поддерживают стабильность, безопасность и бесперебойную работу серверов.
Вы также можете поделиться статьей со своими друзьями в социальных сетях, которым может быть интересна эта статья, или просто оставить комментарий ниже. Спасибо.