Как автоматизировать ежедневную проверку состояния Linux с помощью bash-сценариев в Cron

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

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

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

В этом руководстве я покажу вам, как:

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

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

Что будет отслеживать скрипт?

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

  • Использование диска – чтобы обнаружить низкий объем памяти до того, как это вызовет проблемы.
  • Загрузка процессора – для выявления необычно высокой нагрузки на Сервер.
  • Пользование памятью – для выявления нехватки или утечки памяти.
  • Неработающие службы – чтобы узнать, была ли какая-либо служба systemd аварийной или беззвучно завершила работу.
  • Вывод TOP 5 процессов по загрузке – поиск прожорливых приложений.
  • Аптайм – отслеживание неожиданных перезагрузок.
  • Доступные обновления пакетов – помогает поддерживать систему в безопасном и актуальном состоянии.

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

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

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

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

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

#!/bin/bash
Author: Ravi Saive (Tecmint)
Description: Simple System Health Check Script
LOGFILE="/var/log/system-health-$(date +%F).log"
HOSTNAME=$(hostname)
DATE=$(date)
{
echo "============================================"
echo " System Health Report for $HOSTNAME"
echo " Generated on: $DATE"
echo "============================================"
Disk Usage
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
CPU Load
echo -e "\nCPU Load (1/5/15 min average):"
uptime | awk -F'load average:' '{ print "  " $2 }'
Memory Usage
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 }'
Failed Services
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
Top 5 Memory-Consuming Processes
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) }'
Top 5 CPU-Consuming Processes
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) }'
Uptime
echo -e "\nSystem Uptime:"
echo "  $(uptime -p)"
Package Updates
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"
Optional: Send report via mail (if mail is configured)
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 + O, ENTER для сохранения, CTRL + X для выхода, а затем сделайте скрипт исполняемым с помощью:

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

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

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

sudo /opt/scripts/system-health.sh

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

cat /var/log/system-health-$(date +%F).log

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

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

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

Чтобы запускать скрипт проверки здоровья ежедневно в 7 утра, откройте кронтаб пользователя 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  [On Debian/Ubuntu]
sudo dnf install mailx -y      [On CentOS/RHEL]

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

Заключение

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

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

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

Зарубин Иван Эксперт по Linux и Windows

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

Похожие статьи

Комментарии (0)