192 lines
7.1 KiB
PHP
192 lines
7.1 KiB
PHP
|
|
<?php
|
|||
|
|
/**
|
|||
|
|
* Скрипт для безопасной очистки диска
|
|||
|
|
*
|
|||
|
|
* Удаляет:
|
|||
|
|
* 1. Старые бэкапы SQL (оставляет последние N)
|
|||
|
|
* 2. Большие логи (очищает или удаляет старые)
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
error_reporting(E_ALL);
|
|||
|
|
ini_set('display_errors', 1);
|
|||
|
|
|
|||
|
|
$dryRun = !isset($argv[1]) || $argv[1] !== '--execute';
|
|||
|
|
$keepBackups = isset($argv[2]) ? (int)$argv[2] : (isset($argv[1]) && is_numeric($argv[1]) ? (int)$argv[1] : 5); // Сколько бэкапов оставить
|
|||
|
|
|
|||
|
|
echo "Очистка диска\n";
|
|||
|
|
echo str_repeat("=", 80) . "\n\n";
|
|||
|
|
|
|||
|
|
if (!$dryRun) {
|
|||
|
|
echo "⚠️ РЕЖИМ ПРОВЕРКИ (dry-run)\n";
|
|||
|
|
echo " Для реального удаления запустите: php cleanup_disk.php --execute [количество_бэкапов]\n";
|
|||
|
|
echo " Пример: php cleanup_disk.php --execute 5\n\n";
|
|||
|
|
} else {
|
|||
|
|
echo "⚠️ РЕЖИМ УДАЛЕНИЯ - файлы будут удалены!\n\n";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$stats = [
|
|||
|
|
'backups_found' => 0,
|
|||
|
|
'backups_to_delete' => 0,
|
|||
|
|
'backups_size' => 0,
|
|||
|
|
'logs_found' => 0,
|
|||
|
|
'logs_to_clean' => 0,
|
|||
|
|
'logs_size' => 0,
|
|||
|
|
'total_freed' => 0
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
// 1. Обработка бэкапов SQL
|
|||
|
|
echo "1. ОБРАБОТКА БЭКАПОВ SQL\n";
|
|||
|
|
echo str_repeat("-", 80) . "\n";
|
|||
|
|
|
|||
|
|
$backupDir = __DIR__;
|
|||
|
|
$backups = glob($backupDir . '/backup_before_migration_*.sql');
|
|||
|
|
|
|||
|
|
if (empty($backups)) {
|
|||
|
|
echo " Бэкапы не найдены\n\n";
|
|||
|
|
} else {
|
|||
|
|
$stats['backups_found'] = count($backups);
|
|||
|
|
|
|||
|
|
// Сортируем по дате изменения (новые первыми)
|
|||
|
|
usort($backups, function($a, $b) {
|
|||
|
|
return filemtime($b) - filemtime($a);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
echo " Найдено бэкапов: {$stats['backups_found']}\n";
|
|||
|
|
echo " Оставим последних: {$keepBackups}\n";
|
|||
|
|
echo " Будет удалено: " . max(0, $stats['backups_found'] - $keepBackups) . "\n\n";
|
|||
|
|
|
|||
|
|
$toDelete = array_slice($backups, $keepBackups);
|
|||
|
|
$stats['backups_to_delete'] = count($toDelete);
|
|||
|
|
|
|||
|
|
if (!empty($toDelete)) {
|
|||
|
|
echo " Файлы для удаления:\n";
|
|||
|
|
foreach ($toDelete as $backup) {
|
|||
|
|
$size = filesize($backup);
|
|||
|
|
$stats['backups_size'] += $size;
|
|||
|
|
$sizeMB = round($size / 1024 / 1024, 2);
|
|||
|
|
$date = date('Y-m-d H:i:s', filemtime($backup));
|
|||
|
|
echo " - " . basename($backup) . " ({$sizeMB}MB, {$date})\n";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($dryRun && !empty($toDelete)) {
|
|||
|
|
echo "\n Удаление файлов...\n";
|
|||
|
|
foreach ($toDelete as $backup) {
|
|||
|
|
if (unlink($backup)) {
|
|||
|
|
echo " ✅ " . basename($backup) . " - удален\n";
|
|||
|
|
} else {
|
|||
|
|
echo " ❌ " . basename($backup) . " - ошибка удаления\n";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
echo "\n";
|
|||
|
|
} else {
|
|||
|
|
echo " Нет файлов для удаления\n\n";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 2. Обработка больших логов
|
|||
|
|
echo "2. ОБРАБОТКА ЛОГОВ\n";
|
|||
|
|
echo str_repeat("-", 80) . "\n";
|
|||
|
|
|
|||
|
|
$largeLogs = [
|
|||
|
|
__DIR__ . '/wdall.log',
|
|||
|
|
__DIR__ . '/wdall2.log',
|
|||
|
|
__DIR__ . '/wa_inbound.log',
|
|||
|
|
__DIR__ . '/wa_outbound.log',
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
foreach ($largeLogs as $logFile) {
|
|||
|
|
if (file_exists($logFile)) {
|
|||
|
|
$size = filesize($logFile);
|
|||
|
|
$sizeMB = round($size / 1024 / 1024, 2);
|
|||
|
|
|
|||
|
|
if ($size > 10 * 1024 * 1024) { // Больше 10MB
|
|||
|
|
$stats['logs_found']++;
|
|||
|
|
$stats['logs_size'] += $size;
|
|||
|
|
|
|||
|
|
echo " Найден большой лог: " . basename($logFile) . " ({$sizeMB}MB)\n";
|
|||
|
|
|
|||
|
|
if ($dryRun) {
|
|||
|
|
// Очищаем лог (оставляем последние 1000 строк)
|
|||
|
|
$lines = file($logFile);
|
|||
|
|
if (count($lines) > 1000) {
|
|||
|
|
$keepLines = array_slice($lines, -1000);
|
|||
|
|
if (file_put_contents($logFile, implode('', $keepLines))) {
|
|||
|
|
$newSize = filesize($logFile);
|
|||
|
|
$freedMB = round(($size - $newSize) / 1024 / 1024, 2);
|
|||
|
|
echo " ✅ Очищен (освобождено {$freedMB}MB)\n";
|
|||
|
|
$stats['logs_to_clean']++;
|
|||
|
|
} else {
|
|||
|
|
echo " ❌ Ошибка очистки\n";
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
echo " ℹ️ Лог небольшой, пропущен\n";
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
echo " ⏸️ Будет очищен (dry-run)\n";
|
|||
|
|
$stats['logs_to_clean']++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Обработка логов в папке logs/
|
|||
|
|
$logsDir = __DIR__ . '/logs';
|
|||
|
|
if (is_dir($logsDir)) {
|
|||
|
|
$logFiles = glob($logsDir . '/*.log*');
|
|||
|
|
foreach ($logFiles as $logFile) {
|
|||
|
|
$size = filesize($logFile);
|
|||
|
|
if ($size > 20 * 1024 * 1024) { // Больше 20MB
|
|||
|
|
$sizeMB = round($size / 1024 / 1024, 2);
|
|||
|
|
$mtime = filemtime($logFile);
|
|||
|
|
$daysOld = (time() - $mtime) / 86400;
|
|||
|
|
|
|||
|
|
if ($daysOld > 7) {
|
|||
|
|
$stats['logs_found']++;
|
|||
|
|
$stats['logs_size'] += $size;
|
|||
|
|
|
|||
|
|
echo " Старый большой лог: " . basename($logFile) . " ({$sizeMB}MB, " . round($daysOld) . " дней)\n";
|
|||
|
|
|
|||
|
|
if ($dryRun) {
|
|||
|
|
if (unlink($logFile)) {
|
|||
|
|
echo " ✅ Удален\n";
|
|||
|
|
$stats['logs_to_clean']++;
|
|||
|
|
} else {
|
|||
|
|
echo " ❌ Ошибка удаления\n";
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
echo " ⏸️ Будет удален (dry-run)\n";
|
|||
|
|
$stats['logs_to_clean']++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
echo "\n";
|
|||
|
|
|
|||
|
|
// Итоговая статистика
|
|||
|
|
$stats['total_freed'] = $stats['backups_size'] + $stats['logs_size'];
|
|||
|
|
$totalFreedMB = round($stats['total_freed'] / 1024 / 1024, 2);
|
|||
|
|
$totalFreedGB = round($stats['total_freed'] / 1024 / 1024 / 1024, 2);
|
|||
|
|
|
|||
|
|
echo str_repeat("=", 80) . "\n";
|
|||
|
|
echo "ИТОГОВАЯ СТАТИСТИКА:\n\n";
|
|||
|
|
echo "Бэкапы:\n";
|
|||
|
|
echo " - Найдено: {$stats['backups_found']}\n";
|
|||
|
|
echo " - Будет удалено: {$stats['backups_to_delete']}\n";
|
|||
|
|
echo " - Размер: " . round($stats['backups_size'] / 1024 / 1024 / 1024, 2) . "GB\n\n";
|
|||
|
|
echo "Логи:\n";
|
|||
|
|
echo " - Найдено больших: {$stats['logs_found']}\n";
|
|||
|
|
echo " - Будет обработано: {$stats['logs_to_clean']}\n";
|
|||
|
|
echo " - Размер: " . round($stats['logs_size'] / 1024 / 1024, 2) . "MB\n\n";
|
|||
|
|
echo "ОБЩЕЕ ОСВОБОЖДЕНИЕ: {$totalFreedGB}GB ({$totalFreedMB}MB)\n\n";
|
|||
|
|
|
|||
|
|
if (!$dryRun) {
|
|||
|
|
echo "⚠️ Это был режим проверки. Для реального удаления запустите:\n";
|
|||
|
|
echo " php cleanup_disk.php --execute {$keepBackups}\n\n";
|
|||
|
|
} else {
|
|||
|
|
echo "✅ Очистка завершена!\n\n";
|
|||
|
|
}
|
|||
|
|
|