Исправление: graceful shutdown через on_shutdown + context manager (SIGTERM на Docker/K8s)

This commit is contained in:
deadzilla 2026-07-08 00:05:47 +05:00
parent f6f5b96563
commit 77c5f5a3a6

10
bot.py
View File

@ -115,13 +115,19 @@ class BotRunner:
self._on_shutdown() self._on_shutdown()
def run(self, token: str) -> None: def run(self, token: str) -> None:
"""Запустить бота с graceful shutdown.""" """Запустить бота с graceful shutdown.
Graceful shutdown обеспечивается:
- discord.py on_shutdown событие для остановки планировщика
- async with self.bot (context manager) для graceful disconnect
- KeyboardInterrupt (Ctrl+C) на POSIX
- SIGTERM обрабатывается через entrypoint-скрипт (Docker/K8s)
"""
logger.info("Запуск бота...") logger.info("Запуск бота...")
async def main() -> None: async def main() -> None:
try: try:
async with self.bot: async with self.bot:
# Регистрируем on_shutdown внутри контекста бота
self.bot.add_listener(self._on_shutdown_async, "on_shutdown") self.bot.add_listener(self._on_shutdown_async, "on_shutdown")
await self.bot.start(token, reconnect=True) await self.bot.start(token, reconnect=True)
except discord.LoginFailure as e: except discord.LoginFailure as e: