✅ Решения: 15 шагов восстановления

К оглавлению урока

⚡ Ключевые решения

ssh -i ich.pem ec2-user@18.192.103.67
sudo service httpd start
df -h
find / -type f -size +100M -exec du -h {} +
sudo truncate -s 0 /var/log/httpd/access_log
cp /home/ec2-user/LocalSettings\ \(5\).php /var/www/html/mediawiki/LocalSettings.php
# vi: :%s/18.153.51.162/18.192.103.67/g → :wq
sudo crontab -e  # исправить на: 0 0 * * * /home/ec2-user/backup_logs.sh
chmod +x /home/ec2-user/backup_logs.sh

Полные решения каждого шага

Шаги 1–5: SSH и запуск httpd

Шаг 1. Проверить сайт в браузере — убедиться, что не открывается.

Шаг 2. SSH-подключение к серверу:

ssh -i ich.pem ec2-user@18.192.103.67

Если ключ не имеет правильных прав: chmod 400 ich.pem

Шаг 3. Статус httpd:

sudo service httpd status

Вывод: Active: inactive (dead)

Шаг 4. Запустить httpd:

sudo service httpd start

Шаг 5. Проверить статус:

sudo service httpd status

Вывод: Active: active (running)

Шаги 6–9: Обнаружение проблемы с диском

Шаг 6. Попытка скопировать LocalSettings.php → ошибка:

cp /home/ec2-user/LocalSettings\ \(5\).php \
   /var/www/html/mediawiki/LocalSettings.php

Результат: cp: failed to extend '...': No space left on device

Шаг 7. Проверить error_log:

cat /var/log/httpd/error_log | tail -20

Причина: (28)No space left on device: AH00646: Error writing to logs/access_log

Шаг 8. Проверить свободное место:

df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/nvme0n1p1   10G   10G     0 100% /

Шаг 9. Найти большие файлы:

find / -type f -size +100M -exec du -h {} +

Результат: 7.0G /var/log/httpd/access_log — виновник найден.

Шаги 10–13: Очистка и восстановление конфигурации

Шаг 10. Очистить access_log:

sudo truncate -s 0 /var/log/httpd/access_log

Шаг 11. Проверить место:

df -h

Теперь Use% значительно ниже 100%.

Шаг 12. Скопировать LocalSettings.php:

cp /home/ec2-user/LocalSettings\ \(5\).php \
   /var/www/html/mediawiki/LocalSettings.php

Шаг 13. Исправить $wgServer:

grep "wgServer" /var/www/html/mediawiki/LocalSettings.php
$wgServer = "https://18.153.51.162";
vi /var/www/html/mediawiki/LocalSettings.php

В vi: :%s/18.153.51.162/18.192.103.67/g → Enter → :wq

Шаги 14–15: Исправление cron и скрипт ротации

Шаг 14. Исправить cron root:

sudo crontab -l
* * * * * tar -czf /var/log/httpd/log_$(date +\%Y\%m\%d).tar.gz -C /var/log/httpd .

Исправить через sudo crontab -e: заменить на 0 0 * * * /home/ec2-user/backup_logs.sh

Шаг 15. Создать скрипт и добавить в crontab:

# /home/ec2-user/backup_logs.sh
#!/bin/bash
LOG_DIR="/var/log/httpd"
LOG_FILE="access_log"
BACKUP_DIR="/var/log/httpd/backups"
DATE=$(date +%Y%m%d)
ARCHIVE="$BACKUP_DIR/$LOG_FILE-$DATE.tar.gz"

mkdir -p "$BACKUP_DIR"

# Архивировать лог
tar -czf "$ARCHIVE" -C "$LOG_DIR" "$LOG_FILE"

# Очистить лог после архивации
truncate -s 0 "$LOG_DIR/$LOG_FILE"

# Удалить архивы старше 3 дней
find "$BACKUP_DIR" -type f -name "$LOG_FILE-*.tar.gz" -mtime +3 -exec rm {} \;
chmod +x /home/ec2-user/backup_logs.sh
crontab -e

Добавить в crontab:

0 0 * * * /home/ec2-user/backup_logs.sh

Разбор скрипта backup_logs.sh

Строка Объяснение
LOG_DIR="/var/log/httpd" Директория с логами Apache
BACKUP_DIR="/var/log/httpd/backups" Отдельная директория для архивов (не та же, что логи)
DATE=$(date +%Y%m%d) Дата в формате YYYYMMDD для имени архива
tar -czf "$ARCHIVE" -C "$LOG_DIR" "$LOG_FILE" Архивировать один файл лога; -C — рабочая директория
truncate -s 0 Очистить лог (установить размер 0), не удаляя файл
find ... -mtime +3 -exec rm Удалить архивы старше 3 дней (max 3 копии)