import logging import signal import sys import time from src.config import load_config from src.summarizer import process_all logging.basicConfig( level=logging.INFO, format="%(asctime)s [%(levelname)s] %(name)s: %(message)s", datefmt="%Y-%m-%d %H:%M:%S", ) logger = logging.getLogger("main") _running = True def _signal_handler(signum, frame): global _running logger.info("收到退出信号,正在停止...") _running = False def main(): global _running signal.signal(signal.SIGINT, _signal_handler) signal.signal(signal.SIGTERM, _signal_handler) cfg_path = sys.argv[1] if len(sys.argv) > 1 else "config.yaml" cfg = load_config(cfg_path) logger.info(f"AI邮件摘要机器人已启动,轮询间隔: {cfg.polling.interval_seconds}s") while _running: try: process_all(cfg) except Exception as e: logger.error(f"轮询出错: {e}", exc_info=True) if _running: for _ in range(cfg.polling.interval_seconds): if not _running: break time.sleep(1) logger.info("机器人已停止") if __name__ == "__main__": main()