# main.py import sys import time import logging import schedule import config from database import DatabaseManager from sd_api import ServiceDeskClient from sync_logic import Synchronizer def setup_logging(): """Настраивает базовую конфигурацию логирования.""" logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', stream=sys.stdout, # Вывод логов в stdout ) # Отключаем слишком "болтливые" логи от сторонних библиотек logging.getLogger("requests").setLevel(logging.WARNING) logging.getLogger("urllib3").setLevel(logging.WARNING) def job(): """ Основная задача, которую будет выполнять планировщик. """ log = logging.getLogger(__name__) log.info("Запуск задачи синхронизации...") try: # Инициализация всех компонентов db_manager = DatabaseManager(config.DB_FULL_PATH) sd_client = ServiceDeskClient(config.SD_ACCESS_KEY, config.SD_BASE_URL) # Контекстный менеджер для БД гарантирует открытие/закрытие соединения with db_manager as db: # Перед первым запуском создаем таблицы, если их нет db.setup_tables() synchronizer = Synchronizer(db, sd_client) synchronizer.run_full_sync() except Exception as e: log.critical(f"Произошла непредвиденная ошибка на верхнем уровне: {e}", exc_info=True) if __name__ == '__main__': setup_logging() main_log = logging.getLogger(__name__) # --- Первоначальный запуск --- # Можно запустить один раз при старте, чтобы не ждать первого интервала main_log.info("Первый запуск сервиса...") job() # --- Настройка расписания --- # В вашем коде было 3 минуты, можно настроить как угодно sync_interval_minutes = 15 main_log.info(f"Сервис запущен. Синхронизация будет выполняться каждые {sync_interval_minutes} минут.") schedule.every(sync_interval_minutes).minutes.do(job) while True: schedule.run_pending() time.sleep(1)