59 lines
3.1 KiB
Bash
59 lines
3.1 KiB
Bash
#!/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"
|