rpi: Obsidian-vault через Obsidian Sync, суточный архив в ruzzy/MyVault, скилл obsidian у Astra; алерты backup_vault

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
gilfanovr
2026-10-11 21:20:06 +03:00
co-authored by Claude Opus 5.5
parent 89c9563453
commit 7ef4d0b3e5
7 changed files with 75 additions and 2 deletions
@@ -99,6 +99,7 @@ groups:
or (time() - backup_last_success_timestamp{job="backup_onedrive_verify"} > 8 * 86400)
or (time() - backup_last_success_timestamp{job="backup_servers"} > 26 * 3600)
or (time() - backup_last_success_timestamp{job="backup_router"} > 30 * 3600)
or (time() - backup_last_success_timestamp{job="backup_vault"} > 26 * 3600)
or (time() - backup_last_success_timestamp{job="backup_router_sample"} > 35 * 86400)
for: 10m
labels: {severity: critical}
@@ -191,3 +192,9 @@ groups:
labels: {severity: warning}
annotations:
summary: "Дом: необычно большая ОТДАЧА в интернет — {{ $value | humanize1024 }}Б/с 30+ мин (облачная синхронизация, торрент или что-то подозрительное). Кто: `router traffic --live`."
- alert: BackupNeverReported
expr: absent(backup_last_success_timestamp{instance="rpi",job="backup_vault"})
for: 26h
labels: {severity: warning, instance: rpi, job: backup_vault}
annotations:
summary: "rpi: архив Obsidian-vault в gitea не отчитывался 26+ ч — проверь vault-archive / obsidian-sync"
+21
View File
@@ -0,0 +1,21 @@
#!/bin/bash
# Суточный ОДНОСТОРОННИЙ архив Obsidian-vault в gitea (ruzzy/MyVault).
# Vault синхронизирует Obsidian Sync (obsidian-sync.service, ~astra/vault); git — только история:
# commit + push, никогда не pull — в vault отсюда ничего не попадает.
# Git-каталог отдельно (~astra/vault.git, core.worktree=~astra/vault), чтобы в vault не было .git.
# Скрытые файлы (.obsidian, данные плагинов, .gitignore) Sync на rpi не приносит — их не трогаем,
# иначе git записал бы их удаление.
set -euo pipefail
cd "$HOME"
G=(git --git-dir="$HOME/vault.git" --work-tree="$HOME/vault")
systemctl is-active -q obsidian-sync || { echo "obsidian-sync не работает — архив устарел бы, пропуск"; exit 1; }
"${G[@]}" add -A -- . ":(exclude).*" ":(exclude)**/.*"
if "${G[@]}" diff --cached --quiet; then
echo "изменений нет"
else
stat=$("${G[@]}" diff --cached --shortstat)
"${G[@]}" commit -q -m "Архив vault $(date +%F)" -m "$stat"
echo "коммит: $stat"
fi
"${G[@]}" push -q origin HEAD:main
echo "OK: $("${G[@]}" log -1 --format='%h %s')"
@@ -0,0 +1,15 @@
[Unit]
Description=Obsidian Sync (headless) for vault /home/astra/vault
Wants=network-online.target
After=network-online.target
[Service]
User=astra
Environment=HOME=/home/astra
WorkingDirectory=/home/astra/vault
ExecStart=/usr/bin/ob sync --path /home/astra/vault --continuous
Restart=always
RestartSec=30
[Install]
WantedBy=multi-user.target
@@ -0,0 +1,12 @@
[Unit]
Description=Daily one-way archive of Obsidian vault to gitea (ruzzy/MyVault)
Wants=network-online.target
After=network-online.target obsidian-sync.service
[Service]
Type=oneshot
User=astra
Environment=HOME=/home/astra
ExecStart=/usr/local/bin/vault-archive
ExecStopPost=+/usr/local/bin/backup-metrics backup_vault
TimeoutStartSec=15min
@@ -0,0 +1,10 @@
[Unit]
Description=Daily Obsidian vault archive
[Timer]
OnCalendar=*-*-* 03:45
RandomizedDelaySec=10m
Persistent=true
[Install]
WantedBy=timers.target