From 860f76369567eb8ef59bead1d82ce8ed315fab27 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 16 Mar 2026 14:07:04 +0700 Subject: [PATCH] Watchdog: systemd sd_notify + async heartbeat alle 50s --- homelab-ai-bot/telegram_bot.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/homelab-ai-bot/telegram_bot.py b/homelab-ai-bot/telegram_bot.py index b466a268..482b54aa 100644 --- a/homelab-ai-bot/telegram_bot.py +++ b/homelab-ai-bot/telegram_bot.py @@ -7,9 +7,31 @@ import os import fcntl import atexit import signal +import socket as _socket sys.path.insert(0, os.path.dirname(__file__)) + +def _sd_notify(msg: str): + """Systemd Notify ohne externe Abhaengigkeit.""" + addr = os.environ.get("NOTIFY_SOCKET") + if not addr: + return + if addr[0] == "@": + addr = "\0" + addr[1:] + sock = _socket.socket(_socket.AF_UNIX, _socket.SOCK_DGRAM) + try: + sock.sendto(msg.encode(), addr) + finally: + sock.close() + + +async def _watchdog_loop(): + """Sendet alle 50s WATCHDOG=1 an systemd.""" + while True: + _sd_notify("WATCHDOG=1") + await asyncio.sleep(50) + PIDFILE = "/tmp/hausmeister-bot.pid" _lock_fp = None @@ -735,6 +757,9 @@ def main(): async def post_init(application): await application.bot.set_my_commands(BOT_COMMANDS) log.info("Kommandomenü registriert") + asyncio.create_task(_watchdog_loop()) + _sd_notify("READY=1") + log.info("Systemd Watchdog aktiv (50s Intervall)") app.post_init = post_init log.info("Bot läuft — polling gestartet")