Вот **безопасная и эффективная инструкция по очистке логов** на вашем сервере Ubuntu 24.04, особенно с учётом того, что у вас сайты в `/var/www` и ранее был переполнен диск.
---
###
1. **Быстрая и безопасная очистка (сразу освобождает место)**
```bash
# Очистить основные системные логи (не удаляя файлы — чтобы не сломать rsyslog)
sudo truncate -s 0 /var/log/syslog
sudo truncate -s 0 /var/log/kern.log
# Очистить логи веб-сервера (выберите нужное)
sudo truncate -s 0 /var/log/nginx/access.log 2>/dev/null
sudo truncate -s 0 /var/log/nginx/error.log 2>/dev/null
sudo truncate -s 0 /var/log/apache2/access.log 2>/dev/null
sudo truncate -s 0 /var/log/apache2/error.log 2>/dev/null
# Удалить старые архивы логов (они уже сжаты и не нужны)
sudo rm -f /var/log/*.gz /var/log/*.[0-9] /var/log/*.old
```
> `truncate -s 0` обнуляет файл, но сохраняет его inode — сервисы (nginx, rsyslog) продолжают писать в него без перезапуска.
---
###
2. **Проверить самые большие логи (если нужно глубже)**
```bash
# Топ-10 самых больших файлов в /var/log
sudo find /var/log -type f -exec du -h {} + 2>/dev/null | sort -hr | head -10
```
Если видите огромные файлы вроде:
- `/var/log/nginx/access.log` → обнулите его (см. выше)
- `/var/log/journal/...` → используйте `journalctl`
---
###
3. **Очистка systemd journal (если используется)**
```bash
# Посмотреть размер journal
sudo journalctl --disk-usage
# Оставить только последние 3 дня
sudo journalctl --vacuum-time=3d
# ИЛИ ограничить размером (например, 200 МБ)
sudo journalctl --vacuum-size=200M
```
---
###
4. **Настроить автоматическую ротацию (чтобы не повторилось)**
Убедитесь, что `logrotate` работает:
```bash
# Проверить конфиг для nginx/apache
ls /etc/logrotate.d/
```
Если нет — создайте для Nginx (пример):
```bash
sudo nano /etc/logrotate.d/nginx-custom
```
Вставьте:
```conf
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
[ -f /run/nginx.pid ] && kill -USR1 `cat /run/nginx.pid`
endscript
}
```
Для Apache — аналогично, с сигналом `reload`.
---
###
5. **Проверить результат**
```bash
df -h /
du -sh /var/log
```
Вы должны увидеть:
- Свободное место на диске ↑
- `/var/log` занимает <1–2 ГБ
---
###
Важно: не удаляйте логи через `rm`, если сервис работает!
Неправильно:
```bash
rm /var/log/nginx/access.log # ← может нарушить работу nginx!
```
Правильно:
```bash
truncate -s 0 /var/log/nginx/access.log # ← безопасно
```
---
Хотите — могу помочь:
- Написать скрипт для еженедельной очистки
- Настроить мониторинг роста логов
- Проверить, какие именно логи растут быстрее всего
Скажите, какой веб-сервер вы используете (Nginx или Apache)?
---
###
```bash
# Очистить основные системные логи (не удаляя файлы — чтобы не сломать rsyslog)
sudo truncate -s 0 /var/log/syslog
sudo truncate -s 0 /var/log/kern.log
# Очистить логи веб-сервера (выберите нужное)
sudo truncate -s 0 /var/log/nginx/access.log 2>/dev/null
sudo truncate -s 0 /var/log/nginx/error.log 2>/dev/null
sudo truncate -s 0 /var/log/apache2/access.log 2>/dev/null
sudo truncate -s 0 /var/log/apache2/error.log 2>/dev/null
# Удалить старые архивы логов (они уже сжаты и не нужны)
sudo rm -f /var/log/*.gz /var/log/*.[0-9] /var/log/*.old
```
> `truncate -s 0` обнуляет файл, но сохраняет его inode — сервисы (nginx, rsyslog) продолжают писать в него без перезапуска.
---
###
```bash
# Топ-10 самых больших файлов в /var/log
sudo find /var/log -type f -exec du -h {} + 2>/dev/null | sort -hr | head -10
```
Если видите огромные файлы вроде:
- `/var/log/nginx/access.log` → обнулите его (см. выше)
- `/var/log/journal/...` → используйте `journalctl`
---
###
```bash
# Посмотреть размер journal
sudo journalctl --disk-usage
# Оставить только последние 3 дня
sudo journalctl --vacuum-time=3d
# ИЛИ ограничить размером (например, 200 МБ)
sudo journalctl --vacuum-size=200M
```
---
###
Убедитесь, что `logrotate` работает:
```bash
# Проверить конфиг для nginx/apache
ls /etc/logrotate.d/
```
Если нет — создайте для Nginx (пример):
```bash
sudo nano /etc/logrotate.d/nginx-custom
```
Вставьте:
```conf
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
[ -f /run/nginx.pid ] && kill -USR1 `cat /run/nginx.pid`
endscript
}
```
Для Apache — аналогично, с сигналом `reload`.
---
###
```bash
df -h /
du -sh /var/log
```
Вы должны увидеть:
- Свободное место на диске ↑
- `/var/log` занимает <1–2 ГБ
---
###
Неправильно:
```bash
rm /var/log/nginx/access.log # ← может нарушить работу nginx!
```
Правильно:
```bash
truncate -s 0 /var/log/nginx/access.log # ← безопасно
```
---
Хотите — могу помочь:
- Написать скрипт для еженедельной очистки
- Настроить мониторинг роста логов
- Проверить, какие именно логи растут быстрее всего
Скажите, какой веб-сервер вы используете (Nginx или Apache)?