workbuddy.xpcool.com/.workbuddy/tmp/kuma-bark-setup.sh

59 lines
3.1 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 为 Uptime Kuma 配置 Bark 通知渠道并挂到全部监控2026-09-13
# 幂等:重复执行不会产生重复行
set -e
DB=/app/data/kuma.db
KEY="sm5WnyANWx89GgLtFnRXhk"
KCONF="/data/uptime-kuma/kuma.db"
TS=$(date +%Y%m%d%H%M%S)
echo "=== 0. 备份数据库 ==="
sudo cp "$KCONF" "/tmp/kuma.db.backup.$TS"
ls -l "/tmp/kuma.db.backup.$TS"
echo ""
echo "=== 1. 用 Kuma 的 URL 格式在容器内实测一次(含 icon/group/sound 参数) ==="
sudo docker exec uptime-kuma sh -c "curl -s -o /dev/null -m 15 -w 'kuma_style_url=%{http_code}\n' 'http://172.17.0.1:8081/$KEY/UptimeKuma%20Monitor%20Down/test-from-kuma-container?icon=https%3A%2F%2Fgithub.com%2Flouislam%2Fuptime-kuma%2Fraw%2Fmaster%2Fpublic%2Ficon.png&group=Uptime-Kuma&sound=telegraph'"
echo ""
echo "=== 2. 写入 Bark 通知(若不存在) ==="
NAME='Bark 手机推送'
CONFIG='{"type":"Bark","name":"Bark 手机推送","barkEndpoint":"http://172.17.0.1:8081/sm5WnyANWx89GgLtFnRXhk","barkGroup":"Uptime-Kuma","apiVersion":"v1","isDefault":true,"active":true,"applyExisting":false}'
EXIST=$(sudo docker exec uptime-kuma sqlite3 "$DB" "SELECT COUNT(*) FROM notification WHERE name='$NAME';")
if [ "$EXIST" = "0" ]; then
sudo docker exec uptime-kuma sqlite3 "$DB" "INSERT INTO notification (name, active, user_id, is_default, config) VALUES ('$NAME', 1, 1, 1, '$CONFIG');"
echo "已新增通知渠道"
else
sudo docker exec uptime-kuma sqlite3 "$DB" "UPDATE notification SET active=1, is_default=1, config='$CONFIG' WHERE name='$NAME';"
echo "已更新既有通知渠道"
fi
echo "--- JSON 合法性校验 ---"
sudo docker exec uptime-kuma sqlite3 "$DB" "SELECT id, json_valid(config) AS json_ok, json_extract(config,'\$.type') AS type, json_extract(config,'\$.barkEndpoint') AS endpoint FROM notification;"
NID=$(sudo docker exec uptime-kuma sqlite3 "$DB" "SELECT id FROM notification WHERE name='$NAME' LIMIT 1;")
echo "notification_id=$NID"
echo ""
echo "=== 3. 挂到全部监控(幂等) ==="
sudo docker exec uptime-kuma sqlite3 "$DB" "INSERT INTO monitor_notification (monitor_id, notification_id) SELECT m.id, $NID FROM monitor m WHERE NOT EXISTS (SELECT 1 FROM monitor_notification mn WHERE mn.monitor_id = m.id AND mn.notification_id = $NID);"
echo "--- 关联结果 ---"
sudo docker exec uptime-kuma sqlite3 "$DB" "SELECT mn.monitor_id, m.name, mn.notification_id FROM monitor_notification mn JOIN monitor m ON m.id = mn.monitor_id ORDER BY mn.monitor_id;"
echo ""
echo "=== 4. 重启容器加载配置 ==="
sudo docker restart uptime-kuma > /dev/null
sleep 15
sudo docker ps --filter name=uptime-kuma --format '{{.Names}} | {{.Status}}'
curl -s -o /dev/null -m 10 -w "panel_http=%{http_code}\n" http://127.0.0.1:3001/
echo ""
echo "=== 5. 复核 ==="
sudo docker exec uptime-kuma sqlite3 "$DB" "SELECT id,name,active,is_default FROM notification;"
sudo docker exec uptime-kuma sqlite3 "$DB" "SELECT COUNT(*) AS linked FROM monitor_notification;"
echo "=== 容器日志尾部(看有无通知相关报错) ==="
sudo docker logs --tail 20 uptime-kuma 2>&1 | grep -i -E "error|notification|bark" || echo "(无相关日志)"
echo "DONE"