Watchdog: systemd sd_notify + async heartbeat alle 50s
This commit is contained in:
parent
fdca2072a3
commit
860f763695
1 changed files with 25 additions and 0 deletions
|
|
@ -7,9 +7,31 @@ import os
|
||||||
import fcntl
|
import fcntl
|
||||||
import atexit
|
import atexit
|
||||||
import signal
|
import signal
|
||||||
|
import socket as _socket
|
||||||
|
|
||||||
sys.path.insert(0, os.path.dirname(__file__))
|
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"
|
PIDFILE = "/tmp/hausmeister-bot.pid"
|
||||||
_lock_fp = None
|
_lock_fp = None
|
||||||
|
|
||||||
|
|
@ -735,6 +757,9 @@ def main():
|
||||||
async def post_init(application):
|
async def post_init(application):
|
||||||
await application.bot.set_my_commands(BOT_COMMANDS)
|
await application.bot.set_my_commands(BOT_COMMANDS)
|
||||||
log.info("Kommandomenü registriert")
|
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
|
app.post_init = post_init
|
||||||
log.info("Bot läuft — polling gestartet")
|
log.info("Bot läuft — polling gestartet")
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue