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




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