#!/bin/bash # ============================================================ # Uptime Kuma → Bark 通知链路自检 # 做法:插一个必然失败的临时监控(指向 127.0.0.1:9), # 关联 Bark 通知(id=1),重启 Kuma 等它 DOWN 并推送, # 再从 Bark 容器日志确认真的收到;最后清理临时监控。 # 注意:全程不清真站点。 # ============================================================ DB=/app/data/kuma.db Q() { sudo -n docker exec uptime-kuma sqlite3 "$DB" "$1"; } NAME='自检 · 临时Bark验证' echo "=== 0) BACKUP ===" sudo -n cp /data/uptime-kuma/kuma.db "/tmp/kuma.db.backup.$(date +%Y%m%d%H%M%S)" echo "backup -> /tmp/kuma.db.backup.$(date +%Y%m%d%H%M%S)" echo "=== 1) CLEAN PREVIOUS ===" Q "DELETE FROM monitor_notification WHERE monitor_id IN (SELECT id FROM monitor WHERE name='$NAME');" Q "DELETE FROM heartbeat WHERE monitor_id IN (SELECT id FROM monitor WHERE name='$NAME');" Q "DELETE FROM monitor WHERE name='$NAME';" echo "=== 2) INSERT TEMP MONITOR ===" Q "INSERT INTO monitor (name,active,user_id,type,url,interval,retry_interval,maxretries,weight,accepted_statuscodes_json) VALUES ('$NAME',1,1,'http','http://127.0.0.1:9/',20,20,0,9999,'[\"200-399\"]');" TMPID=$(Q "SELECT id FROM monitor WHERE name='$NAME' LIMIT 1;") echo "tmp monitor id = [$TMPID]" Q "INSERT INTO monitor_notification (monitor_id,notification_id) VALUES ($TMPID,1);" echo "linked to notification 1" Q "SELECT mn.monitor_id, mn.notification_id, n.name, json_extract(n.config,'\$.type') FROM monitor_notification mn JOIN notification n ON n.id=mn.notification_id WHERE mn.monitor_id=$TMPID;" echo "=== 3) RESTART KUMA & WAIT ===" sudo -n docker restart uptime-kuma >/dev/null 2>&1 sleep 80 echo "=== 4) BARK LOG (tail 12) ===" sudo -n docker logs --tail 12 bark 2>&1 echo "=== 5) KUMA LOG notif ===" sudo -n docker logs --tail 150 uptime-kuma 2>&1 | grep -iE "notif|bark|down" | tail -12 echo "=== 6) CLEANUP ===" Q "DELETE FROM heartbeat WHERE monitor_id=$TMPID;" Q "DELETE FROM monitor_notification WHERE monitor_id=$TMPID;" Q "DELETE FROM monitor WHERE id=$TMPID;" echo "cleanup rows done" sudo -n docker restart uptime-kuma >/dev/null 2>&1 echo "kuma restarted" echo "=== 7) FINAL STATE ===" Q "SELECT id,name,active FROM monitor ORDER BY id;" Q "SELECT COUNT(*) AS links FROM monitor_notification;" echo "DONE"