Spaces:
Sleeping
Sleeping
| import cron from 'node-cron'; | |
| import fs from 'fs/promises'; | |
| import path from 'path'; | |
| // ИСПРАВЛЕНИЕ: Используем глобальную временную директорию /tmp. | |
| const TEMP_DIR = '/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) { | |
| // Очищаем только файлы, созданные нашим приложением (у них UUID в имени) | |
| // Это мера предосторожности, чтобы не удалить чужие файлы в /tmp | |
| if (/\b[0-9a-f]{8}\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\b[0-9a-f]{12}\b/i.test(file)) { | |
| 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) { | |
| if (statError.code !== 'ENOENT') { | |
| console.error(`Не удалось получить информацию о файле ${filePath}:`, statError); | |
| } | |
| } | |
| } | |
| } | |
| } catch (readDirError) { | |
| if (readDirError.code === 'ENOENT') { | |
| // Этого не должно случиться с /tmp, но на всякий случай. | |
| console.log('Временная директория не существует, очистка не требуется.'); | |
| } else { | |
| console.error('Ошибка при чтении временной директории:', readDirError); | |
| } | |
| } | |
| console.log('Очистка завершена.'); | |
| } | |
| export function startCleanupJob() { | |
| cleanupOldFiles(); | |
| cron.schedule('0 * * * *', cleanupOldFiles); | |
| console.log('Задача по очистке запланирована на запуск каждый час.'); | |
| } | |