Если вы хоть немного управляли системами Linux, вы уже знаете, насколько повторяющимися и времязатратными могут быть некоторые задачи. Будь то проверка дискового пространства, перезапуск проблемных служб или поддержание вашей системы в актуальном состоянии, выполнение всего вручную быстро становится головной болью, особенно если вы управляете более чем одним сервером.

В этой статье вы узнаете о пяти простых, но мощных Bash-скриптах, которые полезны в повседневном администрировании систем Linux. Эти скрипты подходят для начинающих и легко модифицируются под ваше окружение.

1. Скрипт мониторинга дискового пространства

Одна из самых распространенных проблем на серверах Linux - это нехватка дискового пространства. Логи заполняют пространство, резервные копии растут, и вдруг ваше приложение вылетает, потому что на сервере недостаточно места. Вот почему мой первый скрипт проверяет использование диска и отправляет предупреждение, если использование превышает установленный лимит (скажем, 80%).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#!/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-скрипт для автоматического обновления пакетов, очистки системы и отправки мне отчета.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#!/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, перестают работать. Этот скрипт проверяет, запущена ли конкретная служба, и, если нет, перезапускает ее и уведомляет меня.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#!/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, который создает резервные копии моих критически важных файлов (таких как веб-файлы, базы данных, конфигурационные файлы) и хранит их в сжатом архиве.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#!/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. Скрипт мониторинга входа пользователя

Этот скрипт проверяет активность входа пользователей и уведомляет вас, если кто-то входит в систему, что особенно полезно, если вы управляете производственными серверами и хотите отслеживать доступ.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#!/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, когда выполнять команду, а звездочка означает «все».

1
2
3
4
5
6
7
8
* * * * * команда, которая должна быть выполнена
- - - - -
| | | | |
| | | | ----- День недели (0 - 7) (воскресенье = 0 или 7)
| | | ------- Месяц (1 - 12)
| | --------- День месяца (1 - 31)
| ----------- Час (0 - 23)
-------------- Минута (0 - 59)

Чтобы отредактировать crontab, выполните:

1
$ sudo crontab -e

И добавьте строку:

1
0 3 * * * /usr/local/bin/bash_scripts.sh

Это запланирует cron для запуска команды в 3:00, каждый день любого месяца.

Убедитесь, что сценарий имеет исполняемые разрешения.

Настройка почты

Если вы хотите получить отчет по электронной почте, убедитесь, что ваш сервер может отправлять почту – на большинстве систем достаточно просто установить mailutils.

1
2
$ sudo apt install mailutils -y  [On Debian/Ubuntu]
$ sudo dnf install mailx -y      [On CentOS/RHEL]

Вам также может понадобиться настроить Postfix или SSMTP для корректной пересылки электронной почты, особенно если вы находитесь на облачной виртуальной машине.

Завершение

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

Вы также можете поделиться статьей со своими друзьями в социальных сетях, которым может быть интересна эта статья, или просто оставить комментарий ниже. Спасибо.