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

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

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

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/bin/bash
THRESHOLD=80
EMAIL="[email protected]"
NTFY="curl -H "Title:Мониторинг дискового пространства" -H "Priority: high" -d "Предупреждение: Высокое использование диска" https://ntfy.example.com/server-monitoring"

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 $NTFY
  fi
done

Этот скрипт проверяет каждую партицию, и если какая-либо из них превышает порог в 80%, я получаю электронное письмо, а также push-сообщение в ntfy. Это помогает мне решить проблемы до того, как они станут серьезными. Я запускаю этот скрипт через cron каждые 6 часов.

2. Скрипт автоматизации обновления системы

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/bash
LOGFILE="/var/log/sys-updates.log"
EMAIL="[email protected]"
NTFY="curl -H "Title:Автоматическое обновление системы" -H "Priority: high" -d "Запуск обновлений" https://ntfy.example.com/server-monitoring"

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 $NTFY

(Для пользователей RHEL/CentOS просто замените apt на yum или dnf команды.)

Запуск этого скрипта через cron каждую день позволяет мне поддерживать мои системы в актуальном состоянии и чистоте. Ежедневный отчет по электронной почте, а также push-сообщение в ntfy дает мне уверенность в том, что все прошло гладко. Если что-то сломается, я могу проверить журнал и откатить изменения.

3. Скрипт проверки состояния сервиса

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#!/bin/bash
SERVICES=("apache2" "mysql")
EMAIL="[email protected]"
NTFY="curl -H "Title:Проверка состояния сервиса" -H "Priority: high" -d "был отключен и был перезапущен" https://ntfy.example.com/server-monitoring"

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 $NTFY
  fi
done

Этот скрипт проверяет их каждые 5 минут с помощью cron. Если какой-либо сервис не работает, он автоматически перезапускает его и отправляет мне по электронной почте, а также push-сообщение в ntfy.

4. Скрипт резервного копирования важных файлов

Резервные копии скучны, пока они не понадобятся. У меня есть пользовательский сценарий Bash, который создает резервные копии моих критически важных файлов (таких как веб-файлы, базы данных, конфигурационные файлы) и хранит их в сжатом архиве.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/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]"
NTFY="curl -H "Title:Резервное копирование важных файлов" -H "Priority: high" -d "Успех резервного копирования" https://ntfy.example.com/server-monitoring"

tar -czf $BACKUP_FILE $SOURCE_DIRS

if [ $? -eq 0 ]; then
  echo "Backup completed successfully: $BACKUP_FILE" | mail -s "Backup Success - $HOSTNAME" $EMAIL $NTFY
else
  echo "Backup FAILED!" | mail -s "Backup Failed - $HOSTNAME" $EMAIL $NTFY
fi

У меня были случаи, когда пользователи случайно удаляли важные данные, и этот скрипт спасал меня не раз. Я храню резервные копии за 7 дней и чередую их с другим скриптом для очистки. Вы также можете загрузить резервные копии на удаленный сервер или облачное хранилище для большей безопасности. Уведомляет по электронной почте, а также push-сообщение в ntfy.

5. Скрипт мониторинга входа пользователя

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
LOGFILE="/var/log/auth.log"
LAST_RUN_FILE="/tmp/last_run_time"
EMAIL="[email protected]"
NTFY="curl -H "Title:Мониторинг входа пользователя" -H "Priority: high" -d "Пользователь входит в систему" https://ntfy.example.com/server-monitoring"

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 $NTFY echo $NOW > $LAST_RUN_FILE

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

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

Завершение

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

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