Spaces:
Sleeping
Sleeping
| import cron from 'node-cron'; | |
| import fs from 'fs/promises'; | |
| import path from 'path'; | |
| import { fileURLToPath } from 'url'; | |
| // ИСПРАВЛЕНИЕ: Получаем путь к директории аналогично index.js | |
| const __filename = fileURLToPath(import.meta.url); | |
| const __dirname = path.dirname(__filename); | |
| const TEMP_DIR = path.join(__dirname, 'tmp'); | |
| const MAX_AGE_MS = 24 * 60 * 60 * 1000; // 24 часа в миллисекундах | |
| /** | |
| * Удаляет старые файлы из временной директории. | |
| */ | |
| async function cleanupOldFiles() { | |
| console.log('Запуск задачи по очистке старых файлов...'); | |
| try { | |
| const files = await fs.readdir(TEMP_DIR); | |
| const now = Date.now(); | |
| for (const file of files) { | |
| const filePath = path.join(TEMP_DIR, file); | |
| try { | |
| const stats = await fs.stat(filePath); | |
| const fileAge = now - stats.mtime.getTime(); | |
| if (fileAge > MAX_AGE_MS) { | |
| await fs.unlink(filePath); | |
| console.log(`Удален старый файл: ${filePath}`); | |
| } | |
| } catch (statError) { | |
| // Если файл был удален между readdir и stat, просто игнорируем ошибку | |
| if (statError.code !== 'ENOENT') { | |
| console.error(`Не удалось получить информацию о файле ${filePath}:`, statError); | |
| } | |
| } | |
| } | |
| } catch (readDirError) { | |
| if (readDirError.code === 'ENOENT') { | |
| console.log('Временная директория не существует, очистка не требуется.'); | |
| } else { | |
| console.error('Ошибка при чтении временной директории:', readDirError); | |
| } | |
| } | |
| console.log('Очистка завершена.'); | |
| } | |
| /** | |
| * Запускает периодическую задачу (cron job) для очистки. | |
| * Задача будет выполняться каждый час. | |
| */ | |
| export function startCleanupJob() { | |
| // Запускаем сразу при старте, а затем каждый час | |
| cleanupOldFiles(); | |
| cron.schedule('0 * * * *', cleanupOldFiles); // '0 * * * *' - каждую 0-ю минуту каждого часа | |
| console.log('Задача по очистке запланирована на запуск каждый час.'); | |
| } | |