import os import time import shutil from datetime import datetime from common.logger import system_logger # ========================== # 项目路径 # ========================== BASE_DIR = os.path.dirname( os.path.abspath(__file__) ) # 需要清理的目录 CLEAN_DIRS = [ os.path.join(BASE_DIR, "uploads"), os.path.join(BASE_DIR, "uploads", "temp") ] # ========================== # 清理函数 # ========================== def clear_dir(path): if not os.path.exists(path): system_logger.error( f"[Cleanup] path not exist: {path}" ) return deleted_count = 0 for filename in os.listdir(path): file_path = os.path.join(path, filename) try: if os.path.isfile(file_path): os.remove(file_path) deleted_count += 1 elif os.path.isdir(file_path): shutil.rmtree(file_path) deleted_count += 1 except Exception as e: system_logger.exception( f"[Cleanup] delete failed: {file_path}" ) system_logger.info( f"[Cleanup] done path={path} deleted={deleted_count}" ) # ========================== # 总清理入口 # ========================== def clear_all(): system_logger.info( "[Cleanup] task started" ) for path in CLEAN_DIRS: clear_dir(path) system_logger.info( "[Cleanup] task finished" ) # ========================== # 定时调度 # ========================== TTL_SECONDS = 3600 # 1小时 def scheduler(): system_logger.info("[Cleanup] TTL scheduler started") while True: now = time.time() for path in CLEAN_DIRS: if not os.path.exists(path): continue deleted = 0 for filename in os.listdir(path): file_path = os.path.join(path, filename) try: if not os.path.isfile(file_path): continue # 文件创建时间 file_time = os.path.getmtime(file_path) if now - file_time > TTL_SECONDS: os.remove(file_path) deleted += 1 except Exception as e: system_logger.exception(f"[Cleanup] failed: {file_path}") if deleted > 0: system_logger.info(f"[Cleanup] path={path} deleted={deleted}") time.sleep(300) # 每5分钟检查一次 # ========================== # main # ========================== if __name__ == "__main__": system_logger.info( "[Cleanup] service started" ) scheduler()