diff --git a/utils/morning_runner.py b/utils/morning_runner.py index 77e78f5..17f6cf3 100644 --- a/utils/morning_runner.py +++ b/utils/morning_runner.py @@ -157,8 +157,21 @@ class Scheduler: return self._running = True self._task = asyncio.create_task(self._scheduler_loop()) + self._task.add_done_callback(self._on_task_done) logger.info("Планировщик запущен (время: %s)", self.morning_time) + def _on_task_done(self, task: asyncio.Task) -> None: + """Логировать нештатное завершение task. + + CancelledError — штатное завершение при stop(), поэтому пропускается. + Любое другое исключение — признак ошибки в _scheduler_loop. + """ + if task.cancelled(): + return + exc = task.exception() + if exc and not isinstance(exc, asyncio.CancelledError): + logger.error("Scheduler завершился с ошибкой: %s", exc) + def _stop_scheduler(self): if self._task and not self._task.done(): self._task.cancel()