docs(arr-kraken): Radarr 34/monitored=0, sync-down removed, catalog cron, watchlist->Lampa pipeline
This commit is contained in:
1 parent
f092694858
commit
7df9dfca4a
2 files changed
+133
-38
No files matched your search
@@ -1,15 +1,26 @@
|
||||
---
|
||||
title: Arr Stack — Kraken
|
||||
created: '2026-05-23'
|
||||
updated: '2026-09-20'
|
||||
updated: '2026-09-22'
|
||||
type: tech
|
||||
namespace: family
|
||||
tags: [arr, radarr, sonarr, prowlarr, transmission, jellyfin, infra, kraken]
|
||||
tags:
|
||||
- arr
|
||||
- radarr
|
||||
- sonarr
|
||||
- prowlarr
|
||||
- transmission
|
||||
- jellyfin
|
||||
- infra
|
||||
- kraken
|
||||
related:
|
||||
- "[[tech/jellyfin-config]]"
|
||||
- "[[tech/arr-stack-taiga]]"
|
||||
- "[[tech/prowlarr-flaresolverr-cloudflare]]"
|
||||
- "[[concepts/kraken-media-stack]]"
|
||||
- '[[tech/jellyfin-config]]'
|
||||
- '[[tech/arr-stack-taiga]]'
|
||||
- '[[tech/prowlarr-flaresolverr-cloudflare]]'
|
||||
- '[[concepts/kraken-media-stack]]'
|
||||
- '[[personal/tech/lampac-deployment]]'
|
||||
- '[[family/how-to/lampac-torrents]]'
|
||||
- '[[family/projects/watchlist-automation]]'
|
||||
---
|
||||
|
||||
# Arr Stack — Kraken
|
||||
@@ -83,15 +94,22 @@ Prowlarr → Radarr + Sonarr → Transmission → Jellyfin
|
||||
|
||||
✅ **Watchlist-крон ВОССТАНОВЛЕН 2026-09-20 21:21** (был мёртв с 2026-06-20). Бэкап `~/crontab-backup-20260920-212155.txt`. Детали и разбор — в [[family/projects/watchlist-automation]].
|
||||
|
||||
Актуальное `crontab -l` юзера `kraken`:
|
||||
Актуальное `crontab -l` юзера `kraken` (проверено 2026-09-22):
|
||||
```
|
||||
0 * * * * bash ~/scripts/sync-vault.sh # Obsidian sync
|
||||
0 * * * * pgs-to-srt.sh /media/downloads/complete # PGS→SRT новые
|
||||
0 * * * * pgs-to-srt.sh /media/downloads/complete # PGS→SRT новые
|
||||
0 3 * * * pgs-to-srt.sh /media # PGS→SRT вся библиотека
|
||||
0 1 * * * bash ~/scripts/watchlist-nightly.sh # watchlist nightly ✅ восстановлен
|
||||
0 9 * * 0 bash ~/scripts/watchlist-discover.sh # watchlist discover ✅ восстановлен
|
||||
0 2 * * * bash ~/scripts/watchlist-cleanup.sh --apply # cleanup просмотренного
|
||||
0 1 * * * bash ~/scripts/watchlist-nightly.sh # watchlist nightly (БЕЗ sync-down)
|
||||
0 9 * * 0 bash ~/scripts/watchlist-discover.sh # watchlist discover
|
||||
30 2 * * * bash ~/scripts/watchlist-catalog.sh # JSON-каталог для Lampa ← НОВЫЙ 2026-09-22
|
||||
```
|
||||
|
||||
🔴 **`watchlist-catalog.sh` (30 2 * * *)** — генерация `watchlist.json` для модуля Catalog
|
||||
в Lampa + маркера `❓`. Порядок намеренный: nightly 01:00 → cleanup 02:00 → catalog 02:30.
|
||||
Детали: [[personal/tech/lampac-deployment]], разбор генератора —
|
||||
[[personal/plans/watchlist-tmdb-missing-marker]].
|
||||
|
||||
⚠️ **`media-router.sh` (роутер symlink'ов, каждые 10 мин) в crontab ОТСУТСТВУЕТ.** В таблице «Два параллельных пути» выше он описан как работающий по cron 10min — фактически его там нет. Проверить, нужен ли: без него symlink'и в `/media/{movies,cartoons,...}/` не создаются автоматически.
|
||||
|
||||
Точная проверка наличия любого крон-джоба (не верить доке, смотреть систему):
|
||||
@@ -284,14 +302,25 @@ curl -s -H "X-Api-Key: $PKEY" "http://localhost:9696/prowlarr/api/v1/search?quer
|
||||
|
||||
## Известные проблемы
|
||||
|
||||
- **✅ 2026-09-21 — ДИСК ЗАПОЛНИЛСЯ НА 100%, ПРИЧИНА УСТРАНЕНА.** `sync-down` добавлял
|
||||
**5 фильмов ежедневно без проверки свободного места** → диск 0 байт, Radarr отдавал
|
||||
`disk I/O error` (SQLite не мог писать). Освобождено вручную: удалены **5 remux = 403 ГБ**
|
||||
(Babylon 93 / Schindler's List 90 / Midsommar 86 / Triangle of Sadness 80 / Unhinged 57 ГБ),
|
||||
`monitored=false` выставлен всем 5 → диск **100% → 77%** (404 ГБ свободно).
|
||||
В код добавлен `MIN_FREE_GB = 100`. Полный разбор — [[family/plans/watchlist-disk-overflow-fix]].
|
||||
⚠️ **Профиль `WEB-4K (no remux)` НЕ защищает от переполнения** — он фильтрует тип релиза,
|
||||
но не размер файла и не проверяет свободное место.
|
||||
### 🔴 2026-09-22: авто-закачка УБРАНА ПОЛНОСТЬЮ
|
||||
|
||||
Требование Alex: **закачек быть не должно**. Сделано:
|
||||
|
||||
1. **`sync-down` вырезан из крона.** `watchlist-nightly.sh` стр. 32-36 — вызов закомментирован,
|
||||
вместо него `log "sync-down: ПРОПУЩЕН (автозакачка отключена 2026-09-22)"`.
|
||||
Бэкап `watchlist-nightly.sh.bak-20260922-182655`. Код `sync_down.py` НЕ удалён — можно
|
||||
запустить вручную.
|
||||
2. **16 авто-закачек удалены из Radarr** (все с `added >= 2026-09-20`) через API с
|
||||
`deleteFiles=true` — без этого параметра файл остаётся на диске сиротой.
|
||||
50 → 34 фильма, 12 с файлами, ошибок 0.
|
||||
Дамп для отката: `/tmp/radarr-sonarr-dump-20260922-184351/radarr-movies.json`.
|
||||
3. **Sonarr не тронут** — 13 сериалов, авто-закачек там не было.
|
||||
4. **Все 34 фильма `monitored=false`** — Radarr не будет ничего докачивать.
|
||||
|
||||
⚠️ **Порядок при удалении закачки критичен:** сначала `PUT monitored=false`, потом
|
||||
`DELETE` с `deleteFiles=true`. Иначе Radarr скачает заново.
|
||||
|
||||
### Ранее: инцидент переполнения диска (2026-09-21, устранён)
|
||||
|
||||
### Три страховки `sync-down` (введены 2026-09-21, коммиты `2642882`, `a131208`)
|
||||
|
||||
@@ -647,36 +676,99 @@ GET /Users/{uid}/Items?IsPlayed=true&IncludeItemTypes=Movie&Fields=DatePlayed,Pa
|
||||
|
||||
⚠️ **Это не косметика, а причина, по которой авто-очистка диска не работает.** `sync-up` переносит watched-историю Jellyfin в `[x]`, а `cleanup` удаляет только то, что помечено `[x]`. Пока Jellyfin не видит Radarr-библиотеку, диск (94.7%) будет заполняться, а cleanup будет ежедневно писать «nothing to delete». Разбираться с этим, а не с cleanup. Детали — [[family/plans/watchlist-cleanup]].
|
||||
|
||||
### Radarr: состояние библиотеки (замер 2026-09-21)
|
||||
### Radarr: состояние библиотеки (замер 2026-09-22)
|
||||
|
||||
- 46 фильмов в базе, **28 с файлами** (на 2026-09-20 было 18 — библиотека растёт, диск заполняется).
|
||||
- Топ по размеру: Babylon 98.8 GB, Schindler's List 95.9, Midsommar 91.9, Triangle of Sadness 85.6, Chaos Walking 62.7, Unhinged 60.9.
|
||||
- 🔴 **Диск `/dev/sda1` ЗАПОЛНЕН 100% (0 байт свободно), 2026-09-21.** Ранее (2026-09-21 утром) было 94.7%, `df` показывал 100%. **Radarr лежит с `disk I/O error`** — SQLite не может писать при нуле места:
|
||||
```bash
|
||||
curl -s "http://localhost:7878/radarr/api/v3/movie?apikey=$KEY"
|
||||
# → {"message":"disk I/O error","description":"...SQLiteException (0x87AF045D): disk I/O error..."}
|
||||
```
|
||||
⚠️ **API Radarr не читается, пока диск не освобождён** — не искать причину в конфиге/сети, сначала проверить место.
|
||||
**Причина заполнения:** `sync-down --batch 5` качал 5 фильмов ежедневно без проверки свободного места. `watchlist-nightly` и `watchlist-discover` **остановлены** 2026-09-21 (см. [[family/projects/watchlist-automation]]).
|
||||
**Виновники по объёму — 5 remux-файлов = 403.4 ГБ:** Babylon 92.0, Schindler's List 89.4, Midsommar 85.6, Triangle of Sadness 79.7, Unhinged 56.7 ГБ. Остальные 22 файла (WEB-DL/BDRip, 4–29 ГБ) — не remux, не трогать.
|
||||
- ✅ **РЕШЕНО 2026-09-21: диск освобождён 100% → 77% (свободно 404 ГБ).** Radarr API ожил (49 фильмов).
|
||||
Как делалось:
|
||||
1. Удалены 5 remux-файлов `rm` по точным путям (папки с `.nfo`/постерами оставлены). Бэкап перед — `~/backup-movies-watchlist-20260921-150759.md`.
|
||||
2. `POST /api/v3/command {"name":"RescanMovie","movieId":N}` для id 4, 18, 35, 36, 37 → `hasFile=false`.
|
||||
3. `PUT /api/v3/movie/{id}` с `.monitored=false` → все 5 `monitored=false`. Бэкап — `~/backup-radarr-unmonitor-20260921-151117.json`.
|
||||
⚠️ **Без шага 3 Radarr перекачал бы все 403 ГБ.** Порядок: `monitored=false` **до** любого поиска.
|
||||
⚠️ Без шага 2 `hasFile` остаётся `true` в кэше — сверить после рескана.
|
||||
- ✅ **Стоп-кран добавлен 2026-09-21** (`watchlist-sync`, коммит `2642882`): `MIN_FREE_GB = 100.0` в `sync_down.py`, проверка через **`shutil.disk_usage`, НЕ `df`** (`df` врёт на ~4%, учитывает root-резерв ext4). При нехватке — `[STOP] free space ... < 100 GiB — nothing queued` и выход без добавления. Там же добавлен фильтр ужасов (`is_horror()`, `⭐` обходит). Разбор — [[family/plans/watchlist-disk-overflow-fix]].
|
||||
- **34 фильма в базе, 12 с файлами** (до удаления 16 авто-закачек было 50/28).
|
||||
- 🔴 **`monitored=0` — ни один фильм не отслеживается.** Radarr ничего не докачает.
|
||||
- Объём библиотеки на диске: **251.9 GB**.
|
||||
- Топ по размеру: Chaos Walking 63 GB, Oldboy 31, Project Hail Mary 30, Whiplash 25, The Drama 21.
|
||||
- Диск: **73%, свободно 477 GB** (`/dev/sda1`, 1.8T).
|
||||
- ✅ **Диск был освобождён 2026-09-21: 100% → 77%.** История: `sync-down --batch 5` качал
|
||||
5 фильмов ежедневно без проверки места → диск в 0 байт, Radarr отдавал `disk I/O error`
|
||||
(SQLite не пишет при нуле места). Удалены 5 remux = 403.4 ГБ (Babylon 92.0, Schindler's
|
||||
List 89.4, Midsommar 85.6, Triangle of Sadness 79.7, Unhinged 56.7). Бэкапы:
|
||||
`~/backup-movies-watchlist-20260921-150759.md`, `~/backup-radarr-unmonitor-20260921-151117.json`.
|
||||
**Порядок при удалении: `RescanMovie` → `PUT monitored=false` → `DELETE`.**
|
||||
Без снятия monitored Radarr перекачал бы все 403 ГБ.
|
||||
- ✅ **Стоп-кран `MIN_FREE_GB = 100.0`** в `sync_down.py` (коммит `2642882`): проверка через
|
||||
**`shutil.disk_usage`, НЕ `df`** (`df` врёт на ~4%, учитывает root-резерв ext4).
|
||||
При нехватке — `[STOP] free space ... < 100 GiB` и выход без добавления.
|
||||
Там же фильтр ужасов (`is_horror()`, `⭐` обходит). Разбор — [[family/plans/watchlist-disk-overflow-fix]].
|
||||
- ⚠️ **С 2026-09-22 `sync-down` в кроне не запускается вообще** — стоп-кран и профиль качества
|
||||
остаются как страховка для ручного запуска.
|
||||
- `recycleBin: ''` — **корзины нет, и настраивать её решено НЕ будет** (2026-09-21). `PUT config/mediamanagement` с путём хоста даёт `400 FolderWritableValidator: not writable by user 'abc'`: внутри контейнера Radarr медиа замаплено как `/media`, хостового пути `/srv/...6194539b.../media/.recyclebin` там не существует. Обходить маппингом ради корзины признано нецелесообразным — удаление идёт через Radarr API, а не `rm`. `recycleBinCleanupDays: 7`, `deleteEmptyFolders: False`.
|
||||
- **Все monitored=True.** Если удалить файл, не сняв monitored, Radarr скачает заново — поэтому `cleanup` делает `PUT monitored=false` **до** `DELETE` (порядок критичен).
|
||||
- 🔴 **Все `monitored=false` (2026-09-22).** Если удалять файл — `PUT monitored=false` **до** `DELETE` (порядок критичен, иначе скачает заново).
|
||||
|
||||
Проверка одним вызовом:
|
||||
```bash
|
||||
KEY=$(grep -oP '(?<=<ApiKey>)[^<]+' /srv/...6194539b.../docker/radarr/config/config.xml)
|
||||
# только фильмы с файлами
|
||||
curl -s "http://localhost:7878/radarr/api/v3/movie?apikey=$KEY" \
|
||||
| jq -r '.[] | select(.hasFile) | "\(.id)\t\(.sizeOnDisk/1e9|floor)GB\t\(.monitored)\t\(.title)"'
|
||||
# сводка одной строкой
|
||||
curl -s "http://localhost:7878/radarr/api/v3/movie?apikey=$KEY" | jq -r '
|
||||
"всего=\(length) сФайлом=\([.[]|select(.hasFile)]|length) monitored=\([.[]|select(.monitored)]|length)"'
|
||||
```
|
||||
|
||||
## Watchlist → Lampa: JSON-каталог (2026-09-22)
|
||||
|
||||
Второй потребитель watchlist, помимо Radarr/Sonarr: **модуль Catalog в Lampa**. Пайплайн:
|
||||
|
||||
```
|
||||
movies-watchlist.md (боевой .md)
|
||||
↓ gen_watchlist.py ← крон 30 2 * * * (watchlist-catalog.sh)
|
||||
watchlist.json + missing.json
|
||||
↓
|
||||
Lampa (Catalog): карточки с постерами + маркер ❓ для нерезолвленных
|
||||
```
|
||||
|
||||
### Пути
|
||||
|
||||
| Что | Путь |
|
||||
|---|---|
|
||||
| Генератор | `$H/lampac/scripts/gen_watchlist.py` |
|
||||
| Маркер | `$H/lampac/scripts/mark_missing.py` |
|
||||
| Крон-скрипт | `~/scripts/watchlist-catalog.sh` |
|
||||
| Боевой `.md` | `$H/obsidian/family/documents/movies-watchlist.md` |
|
||||
| Вывод | `$H/lampac/wwwroot/watchlist.json` (376 позиций) |
|
||||
| Нерезолвленные | `$H/lampac/wwwroot/missing.json` |
|
||||
| Кэш | `$H/lampac/cache/.lampac_tmdb_{cache,details}.json` (скрытые файлы) |
|
||||
|
||||
где `$H = /srv/dev-disk-by-uuid-6194539b-03e0-4f33-986b-4da09834e82f`
|
||||
|
||||
### Резолв позиции — три уровня
|
||||
|
||||
```
|
||||
1. Radarr (по названию) ← самый надёжный
|
||||
2. TMDB поиск по названию (+год ±1)
|
||||
2b. эвристика КП по названию
|
||||
2c. kp_id из ссылки в .md → КП → TMDB ← машинный, однозначный (проверяется ПЕРВЫМ из КП)
|
||||
3. промах → маркер ❓ в .md
|
||||
```
|
||||
|
||||
`KP_SIM_THRESHOLD = 0.75` — порог совпадения названия в КП.
|
||||
|
||||
⚠️ **`watchlist.json` использует `channels.*.items[].name`**, НЕ `title`. Поле `title` там отсутствует — не путать при парсинге.
|
||||
|
||||
🔴 **Кириллица в ключе каталога Lampa → `ModInit.goInit` чистит `[^a-z0-9\-]` → HTTP 400.**
|
||||
Нужен `plugin: watchlist` + **числовой** `tmdb_id` (`format: "long.TryParse(...)"`).
|
||||
Проверять через `/catalog/card?...&type=movie`, НЕ `/card`.
|
||||
|
||||
### Маркеры в боевом `.md`
|
||||
|
||||
| Маркер | Значение |
|
||||
|---|---|
|
||||
| `❓` | не резолвлен (нет в TMDB/КП) |
|
||||
| `🗓️` | ещё не вышел |
|
||||
| `👎` | не надо |
|
||||
| `[x]` | смотрел |
|
||||
| `⭐` | приоритет (обходит фильтр ужасов и рейтинг) |
|
||||
|
||||
`mark_missing.py` работает **в обе стороны**: нет позиции в `missing.json` → маркер `❓` **снимается**.
|
||||
|
||||
Полный разбор генератора: [[personal/plans/watchlist-tmdb-missing-marker]].
|
||||
Деплой и плагин: [[personal/tech/lampac-deployment]].
|
||||
|
||||
## Notes
|
||||
|
||||
- See [[arr-stack-taiga]] for Taiga (secondary) arr stack
|
||||
|
||||
@@ -15,6 +15,9 @@ related:
|
||||
- '[[personal/plans/lampac-kraken]]'
|
||||
- '[[personal/plans/lampac-watchlist-plugin]]'
|
||||
- '[[personal/plans/watchlist-tmdb-missing-marker]]'
|
||||
- '[[family/how-to/lampac-torrents]]'
|
||||
- '[[personal/tech/lampac-torrserver]]'
|
||||
- '[[family/how-to/arr-stack-kraken]]'
|
||||
- '[[personal/tech/multistream-single-flow-limit]]'
|
||||
- '[[family/how-to/kraken-network]]'
|
||||
- '[[family/how-to/tv-luna-send]]'
|
||||
|
||||
Reference in new issue
Block a user