Полные решения каждого шага
Шаги 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 копии) |