#!/usr/bin/env python3 # -*- coding: utf-8 -*- """Поставить ротацию стакана на суточный таймер. Запускать на арене под sudo.""" import os, re, subprocess, sys def sh(c, t=60): r = subprocess.run(c, shell=True, capture_output=True, text=True, timeout=t) return (r.stdout or r.stderr or "").strip() # DSN берём оттуда же, откуда его берут боты — второй копии ключа не заводим dsn = "" for p in ("/opt/arena",): out = sh(f"grep -rhoE 'host=[^\"\\']*dbname=sovereign[^\"\\']*' {p}/*.py 2>/dev/null | head -1") if out: dsn = out break if not dsn: sys.exit("не нашёл строку подключения к базе — таймер не ставлю") print("строка подключения найдена, длина", len(dsn)) SERVICE = f"""[Unit] Description=L2 orderbook retention 7d [Service] Type=oneshot Environment=PGDSN={dsn} ExecStart=/usr/bin/python3 /opt/arena/l2_rotate.py --apply --days 7 """ TIMER = """[Unit] Description=L2 retention daily [Timer] OnCalendar=*-*-* 03:30:00 Persistent=true [Install] WantedBy=timers.target """ open("/etc/systemd/system/arena-l2-rotate.service", "w").write(SERVICE) open("/etc/systemd/system/arena-l2-rotate.timer", "w").write(TIMER) os.chmod("/etc/systemd/system/arena-l2-rotate.service", 0o600) # внутри DSN print(sh("systemctl daemon-reload && systemctl enable --now arena-l2-rotate.timer 2>&1 | tail -1")) print(sh("systemctl list-timers arena-l2-rotate --no-pager | head -3"))