#!/usr/bin/python3 # Mail the tail of a failed unit's journal. Usage: restic-alert import os, smtplib, socket, subprocess, sys from email.message import EmailMessage unit = sys.argv[1] env = dict(l.rstrip("\n").split("=", 1) for l in open("/etc/restic/env") if "=" in l) log = subprocess.run(["journalctl", "-u", unit, "-n", "60", "--no-pager", "-o", "cat"], capture_output=True, text=True).stdout msg = EmailMessage() msg["Subject"] = f"[{socket.gethostname()}] {unit} failed" msg["From"] = env["ALERT_SMTP_USER"] msg["To"] = env["ALERT_RECIPIENT"] msg.set_content(log) with smtplib.SMTP(env["ALERT_SMTP_HOST"], int(env["ALERT_SMTP_PORT"]), timeout=30) as s: s.starttls() s.login(env["ALERT_SMTP_USER"], env["ALERT_SMTP_PASSWORD"]) s.send_message(msg)