Как автоматизировать ежедневные проверки работоспособности Linux с помощью скрипта Bash + Cron

26.06.2025
Как автоматизировать ежедневные проверки работоспособности Linux с помощью скрипта Bash + Cron

Ежедневное управление серверами Linux может быть увлекательным и напряженным, особенно когда вы имеете дело с неожиданными простоями или сбоями в обслуживании. Одна вещь, которую мы усвоили за 15+ лет работы системным администратором Linux, заключается в следующем: профилактика лучше лечения.

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

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

В этой статье мы покажем вам, как:

  • Создайте простой, но мощный Bash-скрипт для проверки критически важного состояния системы.
  • Настройте его на ежедневный запуск с помощью Cron.
  • Получите отчет по электронной почте (необязательно).

 

Этот скрипт отлично работает на любом популярном дистрибутиве Linux и подходит как для персональных настроек VPS, так и для производственных сред. Хотя первоначальная настройка занимает всего 10-15 минут, она может сэкономить вам часы устранения неполадок в дальнейшем.

 

Что будет контролировать сценарий?

Вот основные проверки работоспособности системы, которые мы включим в сценарий:

  • Использование диска — позволяет выявить нехватку места на диске до того, как это приведет к проблемам.
  • Загрузка ЦП — для выявления необычно высокой нагрузки на сервер.
  • Использование памяти — для выявления нехватки памяти или утечек.
  • Ошибочные службы — чтобы узнать, произошел ли сбой или сбой какой-либо службы systemd без вывода сообщений об ошибке.
  • 5 самых ресурсоемких процессов в области памяти и ЦП — для поиска приложений, требующих много ресурсов.
  • Время работы системы — для отслеживания неожиданных перезагрузок.
  • Доступные обновления пакетов (необязательно) — помогают поддерживать вашу систему в безопасности и актуальном состоянии.

 

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

 

Шаг 1: Создайте сценарий проверки работоспособности

Создайте новый файл с именем s ystem-health.shв предпочитаемом вами каталоге, например, /opt/scripts.

sudo mkdir -p /opt/scripts
sudo nano /opt/scripts/system-health.sh

 

Теперь скопируйте и вставьте в него следующий скрипт:

#!/bin/bash

# Описание: Простой скрипт проверки работоспособности системы

LOGFILE="/var/log/system-health-$(date +%F).log"
HOSTNAME=$(hostname)
DATE=$(date)

{
echo "============================================="
echo "Отчет о состоянии системы для $HOSTNAME"
echo "Сгенерировано: $DATE"
echo "============================================="

# Использование диска
echo -e "\nDisk Usage:"
printf "%-20s %-10s %-10s %-10s %-6s %-s\n" "Filesystem" "Size" "Used" "Avail" "Use%" "Mounted on"
df -h --output=source,size,used,avail,pcent,target | tail -n +2

# Загрузка ЦП
echo -e "\nCPU Load (1/5/15 min average):"
uptime | awk -F'load average:' '{ print "  " $2 }'

# Использование памяти
echo -e "\nMemory Usage:"
free -h | awk 'NR==1 || /Mem|Swap/ { printf "  %-10s %-10s %-10s %-10s %-10s %-10s\n", $1, $2, $3, $4, $5, $6 }'

# Неудачные услуги
echo -e "\nFailed Systemd Services:"
FAILED=$(systemctl --failed --no-legend)
if [ -z "$FAILED" ]; then
    echo "  No failed services."
else
    echo "$FAILED" | while read -r line; do
        echo "  $line"
    done
fi

# 5 самых потребляющих память процессов
echo -e "\nTop 5 Memory Consuming Processes:"
ps -eo user,pid,%cpu,%mem,command --sort=-%mem | head -n 6 | \
awk '{ printf "  %-10s %-6s %-6s %-6s %-s\n", $1, $2, $3, $4, substr($0, index($0,$5), 60) }'


# 5 самых ресурсоемких процессов ЦП
echo -e "\nTop 5 CPU Consuming Processes:"
ps -eo user,pid,%cpu,%mem,command --sort=-%cpu | head -n 6 | \
awk '{ printf "  %-10s %-6s %-6s %-6s %-s\n", $1, $2, $3, $4, substr($0, index($0,$5), 60) }'


# Время безотказной работы
echo -e "\nSystem Uptime:"
echo "  $(uptime -p)"

# Обновления пакетов
echo -e "\nAvailable Package Updates:"
if command -v apt &> /dev/null; then
    UPDATES=$(apt list --upgradable 2>/dev/null | grep -v "Listing...")
    if [ -z "$UPDATES" ]; then
        echo "  System is up to date."
    else
        echo "$UPDATES" | awk '{ print "  " $0 }'
    fi
elif command -v dnf &> /dev/null; then
    dnf check-update || echo "  System is up to date."
elif command -v yum &> /dev/null; then
    yum check-update || echo "  System is up to date."
else
    echo "  Package manager not supported."
fi

echo -e "\nEnd of Report"

} > "$LOGFILE"

# Необязательно: Отправить отчет по почте (если настроена почта)
MAIL_TO="your@email.com"
if command -v mail > /dev/null 2>&1; then
    mail -s "Daily Health Report for $HOSTNAME" "$MAIL_TO" < "$LOGFILE"
fi

Нажмите CTRL+OENTER для сохранения, CTRL+Xчтобы выйти, а затем сделайте скрипт исполняемым с помощью:

sudo chmod +x /opt/scripts/system-health.sh

 

Шаг 2: Проверьте скрипт вручную (перед автоматизацией)

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

sudo /opt/scripts/system-health.sh

 

Вы должны увидеть хорошо структурированный отчет с подробной информацией об использовании диска, загрузке ЦП, статистике памяти, отказавших службах и многом другом.

cat /var/log/system-health-$(дата +%F).log

 

Если все выглядит хорошо, вы готовы автоматизировать процесс с помощью Cron.

 

Шаг 2: Настройте задание Cron

Теперь, когда ваш скрипт готов, пришло время автоматизировать его с помощью cron — встроенного инструмента Linux, который запускает задачи в запланированное время.

Чтобы запустить скрипт проверки работоспособности ежедневно в 7 утра, откройте crontab пользователя root. Поскольку мы проверяем ресурсы на уровне системы, лучше всего запустить скрипт как пользователь root:

sudo crontab -e

 

В конце файла добавьте следующую строку:

0 7 * * * /opt/scripts/system-health.sh

 

Если вы хотите сохранить вывод или ошибки задания cron, вы можете изменить строку следующим образом:

0 7 * * * /opt/scripts/system-health.sh >> /var/log/system-health-cron.log 2>&1

 

Шаг 3: Настройка почты (необязательно, но полезно)

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

sudo apt install mailutils -y [в Debian/Ubuntu]
sudo dnf install mailx -y [В CentOS/RHEL]

 

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

 

Шаг 4: Отображение работоспособности системы в MOTD (сообщение дня)

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

Создайте облегченный сценарий MOTD и сохраните его как /etc/update-motd.d/99-system-health.

#!/bin/bash
# Lightweight System Health MOTD

echo "==== 🩺 System Health: $(hostname) ===="
echo "🕒 Uptime: $(uptime -p)"
echo "💽 Disk: $(df -h / | awk 'NR==2 {print $5 " used on " $6}')"
echo "📊 CPU Load: $(uptime | awk -F'load average:' '{print $2}' | sed 's/^ //')"
echo "🧠 Memory: $(free -m | awk '/Mem:/ {print $3 "MB used / " $2 "MB total"}')"
FAILED=$(systemctl --failed --no-legend | wc -l)
echo "🚨 Failed Services: $FAILED"
echo "====================================="

 

Сделайте его исполняемым:

sudo chmod +x /etc/update-motd.d/99-system-health

Этот метод работает в системах на базе Ubuntu и Debian, где динамический MOTD включен по умолчанию. Для других дистрибутивов вы можете включить этот скрипт в .bashrcили .bash_profile.

Теперь каждый раз, когда вы подключаетесь к своему серверу по SSH, вы будете получать краткий обзор состояния вашей системы — никаких дополнительных действий не требуется!

==== 🩺 System Health: server01 ====
🕒 Uptime: up 2 days, 4 hours
💽 Disk: 68% used on /
📊 CPU Load: 0.12, 0.21, 0.25
🧠 Memory: 842MB used / 1987MB total
🚨 Failed Services: 0
=====================================

 

Заключение

С помощью этого скрипта Bash + настройки Cron вы можете автоматизировать ежедневные проверки работоспособности и получать аккуратный отчет, отправляемый прямо на ваш почтовый ящик. Больше не нужно гадать, заполнен ли ваш диск или служба тихо отказала в фоновом режиме.

Это просто работает, каждый день, и дарит вам душевное спокойствие.

💬 Если вам понравилась эта статья или у вас есть предложения по ее улучшению, не стесняйтесь оставлять комментарии ниже.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Редактор: AndreyEx

Рейтинг: 5 (1 голос)
Если статья понравилась, то поделитесь ей в социальных сетях:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Это может быть вам интересно


Загрузка...

Спасибо!

Теперь редакторы в курсе.

Прокрутить страницу до начала