diff --git a/Plugin/unraid/Tools/ui_map_build.php b/Plugin/unraid/Tools/ui_map_build.php index 16498d3..e98b845 100644 --- a/Plugin/unraid/Tools/ui_map_build.php +++ b/Plugin/unraid/Tools/ui_map_build.php @@ -134,7 +134,12 @@ $md .= "- **The AI tab** shows the AI sections together under **Settings → Con $md .= "Both write through the same guarded path: the change is validated, the conf is backed up,\n" . "the result is syntax-checked and read back, and a bad write is rolled back.\n\n"; $md .= "A setting is edited by finding its row and changing the control described below. The Save\n" - . "button sends only what was actually changed.\n\n---\n"; + . "button sends only what was actually changed.\n\n"; +$md .= "**When someone asks where a setting is, answer with the route.** Every setting here has a\n" + . "control in the browser, so the conf file it lands in is background rather than an\n" + . "instruction — telling someone to edit the file by hand is the wrong answer when a switch\n" + . "exists, and it is also the riskier one. The exception is the list at the very bottom:\n" + . "those settings genuinely have no control, and saying so is the right answer.\n\n---\n"; // A section with no section-level route may still have per-key routes, if a page carries a // purpose-built control for some of its settings. That is a reachable section — just one whose @@ -153,8 +158,11 @@ foreach ($sections as $k => $g) { $reachable++; $md .= "\n## " . $g['subsection'] . "\n\n"; - $md .= "In `" . $g['file'] . "`.\n\n"; + // The route leads. Naming the conf file first invited answers that told the operator to edit + // host1.conf and mentioned the tab as an afterthought — which is the habit this file exists + // to break. The file is still stated, because "where does this end up" is a fair question, + // but it is stated last and as a fact rather than as an instruction. $seen = array_values(array_diff(array_unique($routes[$k]), ['__perkey__'])); if (!$seen) { $md .= "No single page shows this section. Individual settings below carry their own route.\n\n"; @@ -163,6 +171,7 @@ foreach ($sections as $k => $g) { : "Reachable from:\n\n" . implode("\n", array_map(fn($r) => "- $r", $seen)) . "\n\n"; } + $md .= "Saved into `" . $g['file'] . "`, which does not need to be opened by hand.\n\n"; $md .= "| Setting | Control | Where | What it does |\n|---|---|---|---|\n"; foreach ($g['fields'] as $f) { $ctl = UI_CONTROL_WORDS[$f['widget'] ?? 'text'] ?? 'a text box'; diff --git a/Plugin/unraid/pages/readme/ui-map.md b/Plugin/unraid/pages/readme/ui-map.md index c87ac16..8c51430 100644 --- a/Plugin/unraid/pages/readme/ui-map.md +++ b/Plugin/unraid/pages/readme/ui-map.md @@ -18,14 +18,20 @@ the result is syntax-checked and read back, and a bad write is rolled back. A setting is edited by finding its row and changing the control described below. The Save button sends only what was actually changed. +**When someone asks where a setting is, answer with the route.** Every setting here has a +control in the browser, so the conf file it lands in is background rather than an +instruction — telling someone to edit the file by hand is the wrong answer when a switch +exists, and it is also the riskier one. The exception is the list at the very bottom: +those settings genuinely have no control, and saying so is the right answer. + --- ## Arr Recovery Toggles -In `host1.conf`. - Route: Scheduler tab → **Arrs Failed Stalled Recovery** → Config → *Arr Recovery Toggles* +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `HOST1_LIDARR_RECOVERY` | a switch | in this section | HOST1 only — exits cleanly on HOST2 | @@ -34,33 +40,33 @@ Route: Scheduler tab → **Arrs Failed Stalled Recovery** → Config → *Arr Re ## Backup Verify -In `host1.conf`. - Route: Scheduler tab → **Backup Verify** → Config → *Backup Verify* +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `HOST1_BACKUP_VERIFY_SHARES` | a list, one entry per line | in this section | Leave empty to use HOST1_DAILY_SYNC_SHARES automatically. | ## Certificate Monitor -In `host1.conf`. - Reachable from: - Scheduler tab → **Cert Monitor** → Config → *Certificate Monitor* - Scheduler tab → **Weekly Health Digest** → Config → *Certificate Monitor* +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `HOST1_CERT_MONITOR_DOMAINS` | a list, one entry per line | in this section | — | ## Corruption Scan -In `host1.conf`. - Route: Scheduler tab → **Arr Corruption Scan** → Config → *Corruption Scan* +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `HOST1_FFPROBE_CONTAINER` | a text box | in this section | — | @@ -69,50 +75,50 @@ Route: Scheduler tab → **Arr Corruption Scan** → Config → *Corruption Scan ## Critical Sync Shares -In `host1.conf`. - Route: Scheduler tab → **Critical Sync Maintenance** → Config → *Critical Sync Shares* +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `HOST1_CRITICAL_SYNC_SHARES` | a list, one entry per line | in this section | Appdata shares synced every 30 minutes. Format: "/path/to/share" or "/path/to/share\|profile-name" | ## DDNS -In `host1.conf`. - Route: Scheduler tab → **Fallback** → Config → *DDNS* +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `HOST1_DDNS_CONTAINERS` | a list, one entry per line | in this section | DDNS containers this host manages. | ## Daily Sync Shares -In `host1.conf`. - Route: Scheduler tab → **Daily Sync Maintenance** → Config → *Daily Sync Shares* +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `HOST1_DAILY_SYNC_SHARES` | a list, one entry per line | in this section | Media shares this host pushes to all other nodes every night. Uses DEFAULT_RSYNC_OPTS from master.conf — no profile needed. | ## Docker Daily Restart -In `host1.conf`. - Route: Scheduler tab → **Docker Daily Restart** → Config → *Docker Daily Restart* +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `HOST1_DAILY_RESTART_CONTAINERS` | a list, one entry per line | in this section | — | ## Docker Network Connect -In `host1.conf`. - Route: Scheduler tab → **Docker Network Connect** → Config → *Docker Network Connect* +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `HOST1_NETWORK_CONNECT_CONTAINERS` | a list, one entry per line | in this section | — | @@ -120,10 +126,10 @@ Route: Scheduler tab → **Docker Network Connect** → Config → *Docker Netwo ## Docker Watchdog -In `host1.conf`. - Route: Scheduler tab → **Docker Watchdog** → Config → *Docker Watchdog* +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `HOST1_WATCHDOG_CONTAINERS` | a list, one entry per line | in this section | Memory hard limits in MB — immediate restart if exceeded. 20GB=20480 16GB=16384 8GB=8192 4GB=4096 2GB=2048 1GB=1024 | @@ -136,23 +142,23 @@ Route: Scheduler tab → **Docker Watchdog** → Config → *Docker Watchdog* ## Docker Weekly Restart -In `host1.conf`. - Route: Scheduler tab → **Docker Weekly Restart** → Config → *Docker Weekly Restart* +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `HOST1_WEEKLY_RESTART_CONTAINERS` | a list, one entry per line | in this section | — | ## Downloaders -In `host1.conf`. - Reachable from: - Scheduler tab → **Downloaders Reset** → Config → *Downloaders* - Scheduler tab → **Resource Watchdog** → Config → *Downloaders* +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `HOST1_SLSKD_URL` | a text box | in this section | — | @@ -166,8 +172,6 @@ Reachable from: ## Emby -In `host1.conf`. - Reachable from: - Scheduler tab → **Emby Session Report** → Config → *Emby* @@ -180,6 +184,8 @@ Reachable from: - Scheduler tab → **Emby To Sonarr Sync** → Config → *Emby* - Scheduler tab → **Emby Database Repair** → Config → *Emby* +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `HOST1_EMBY_CONTAINER` | a text box | in this section | — | @@ -188,28 +194,26 @@ Reachable from: ## Intermediate Sync Shares -In `host1.conf`. - Route: Scheduler tab → **Intermediate Sync Maintenance** → Config → *Intermediate Sync Shares* +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `HOST1_INTERMEDIATE_SYNC_SHARES` | a list, one entry per line | in this section | Shares synced every 4 hours. Leave empty to skip mid-day rsync. | ## Internet Loss -In `host1.conf`. - Route: Scheduler tab → **Fallback** → Config → *Internet Loss* +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `FALLBACK_HOST1_STOP_ON_NO_NET` | a list, one entry per line | in this section | Containers stopped immediately when internet is lost. | ## Lidarr -In `host1.conf`. - Reachable from: - Scheduler tab → **Lidarr Cleanup** → Config → *Lidarr* @@ -219,6 +223,8 @@ Reachable from: - Scheduler tab → **Playback Aware Lidarr Discovery** → Config → *Lidarr* - Scheduler tab → **Emby To Lidarr Sync** → Config → *Lidarr* +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `HOST1_LIDARR_URL` | a text box | in this section | — | @@ -230,10 +236,10 @@ Reachable from: ## Media Cleaner -In `host1.conf`. - Route: Scheduler tab → **Media Cleaner** → Config → *Media Cleaner* +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `HOST1_ANIME_CLEAN_FOLDERS` | a list, one entry per line | in this section | — | @@ -241,24 +247,24 @@ Route: Scheduler tab → **Media Cleaner** → Config → *Media Cleaner* ## Media Permissions -In `host1.conf`. - Reachable from: - Scheduler tab → **Media Shares Permissions** → Config → *Media Permissions* - Scheduler tab → **Bulk Permissions Repair** → Config → *Media Permissions* - Scheduler tab → **Trailer Folder Migration** → Config → *Media Permissions* +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `HOST1_MEDIA_PERMISSION_SHARES` | a list, one entry per line | in this section | — | ## Network Watchdog -In `host1.conf`. - Route: Scheduler tab → **Network Watchdog** → Config → *Network Watchdog* +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `HOST1_NETWORK_WATCHDOG_DDNS_DOMAIN` | a text box | in this section | — | @@ -267,23 +273,23 @@ Route: Scheduler tab → **Network Watchdog** → Config → *Network Watchdog* ## Notifications -In `host1.conf`. - No single page shows this section. Individual settings below carry their own route. +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `HOST1_DISCORD_WEBHOOK` | a text box | Settings tab | Discord webhook — leave blank to disable. | ## Ollama -In `host1.conf`. - Reachable from: - Scheduler tab → **Ai Index** → Config → *Ollama* - Scheduler tab → **Ai Query** → Config → *Ollama* +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `HOST1_OLLAMA_URL` | a text box | in this section | e.g. http://localhost:11434 — empty if no local Ollama | @@ -292,10 +298,10 @@ Reachable from: ## PARTNERSHIP -In `host1.conf`. - Route: Partnership tab → Array Settings → *PARTNERSHIP* +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `HOST1_PARTNERSHIP_AUTH_WEBUIS` | a list, one entry per line | in this section | Auth containers reconfigured on onboard/offboard. Format: "ContainerName\|WebUIPort" | @@ -313,8 +319,6 @@ Route: Partnership tab → Array Settings → *PARTNERSHIP* ## Radarr -In `host1.conf`. - Reachable from: - Scheduler tab → **Radarr Cleanup** → Config → *Radarr* @@ -323,6 +327,8 @@ Reachable from: - Scheduler tab → **Radarr Tmdb Removed** → Config → *Radarr* - Scheduler tab → **Emby To Radarr Sync** → Config → *Radarr* +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `HOST1_RADARR_URL` | a text box | in this section | — | @@ -338,20 +344,20 @@ Reachable from: ## SMART Health -In `host1.conf`. - Route: Scheduler tab → **Smart Health** → Config → *SMART Health* +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `HOST1_SMART_IGNORE_DRIVES` | a list, one entry per line | in this section | — | ## SYSTEM WATCHDOG -In `host1.conf`. - Route: Scheduler tab → **Watchdog Orchestrator** → Config → *SYSTEM WATCHDOG* +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `HOST1_SYS_WATCHDOG_NIC` | a text box | in this section | — | @@ -376,8 +382,6 @@ Route: Scheduler tab → **Watchdog Orchestrator** → Config → *SYSTEM WATCHD ## Sonarr -In `host1.conf`. - Reachable from: - Scheduler tab → **Sonarr Cleanup** → Config → *Sonarr* @@ -386,6 +390,8 @@ Reachable from: - Scheduler tab → **Sonarr Tvdb Removed** → Config → *Sonarr* - Scheduler tab → **Emby To Sonarr Sync** → Config → *Sonarr* +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `HOST1_SONARR_URL` | a text box | in this section | — | @@ -400,40 +406,40 @@ Reachable from: ## Storage mode -In `host1.conf`. - No single page shows this section. Individual settings below carry their own route. +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `HOST1_STORAGE_MODE_INTERNAL` | a switch | Settings tab | Controls where Varaverk stores scripts, conf, and state files. true = internal NVMe/SSD — /boot/config/plugins/varaverk (write-safe, git-direct) false = USB flash boot — /mnt/user/appdata/Varaverk (preserves flash lifetime) Auto-detected from boot device transport on first setup. To change: Settings → Storage → Migrate. | ## Weekly Sync Shares -In `host1.conf`. - Route: Scheduler tab → **Weekly Sync Maintenance** → Config → *Weekly Sync Shares* +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `HOST1_WEEKLY_SYNC_SHARES` | a list, one entry per line | in this section | Appdata shares synced during the weekly maintenance window. Profiles (emby, critical-data) drive container stops — define in master.conf. | ## ZFS Report -In `host1.conf`. - Route: Scheduler tab → **Zfs Memory Snapshot** → Config → *ZFS Report* +Saved into `host1.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `HOST1_ZFS_REPORT_IGNORE_POOLS` | a list, one entry per line | in this section | — | ## AI Conf Write Access -In `master.conf`. - Route: AI tab → Settings → Configuration → *AI Conf Write Access* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `AI_CONF_WRITE_ENABLED` | a switch | in this section | Separate switch from AI_ENABLED, off by default, and an explicit key whitelist. Never paths, never credentials, never a container name. An empty whitelist means no writes regardless of the toggle. | @@ -441,13 +447,13 @@ Route: AI tab → Settings → Configuration → *AI Conf Write Access* ## AI Feature Toggles -In `master.conf`. - Reachable from: - Scheduler tab → **Ai Token Sync** → Config → *AI Feature Toggles* - AI tab → Settings → Configuration → *AI Feature Toggles* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `AI_ASSIST_REPORTS` | a switch | in this section | tier 1 — digest / coffee report narration | @@ -458,10 +464,10 @@ Reachable from: ## AI Learned Memory -In `master.conf`. - Route: AI tab → Settings → Configuration → *AI Learned Memory* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `AI_MEMORY_LEARN_ENABLED` | a switch | in this section | Costs nothing while off: the instruction that asks for a candidate is only added to the prompt when this is true, so a disabled feature is genuinely absent rather than merely ignored. | @@ -469,8 +475,6 @@ Route: AI tab → Settings → Configuration → *AI Learned Memory* ## AI Master Switch -In `master.conf`. - Reachable from: - Scheduler tab → **Ai Index** → Config → *AI Master Switch* @@ -478,6 +482,8 @@ Reachable from: - Scheduler tab → **Ai Repair Sweep** → Config → *AI Master Switch* - AI tab → Settings → Configuration → *AI Master Switch* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `AI_ENABLED` | a switch | Settings tab | Fail-closed: anything other than the literal "true" means off. | @@ -488,10 +494,10 @@ Reachable from: ## AI Memory -In `master.conf`. - Route: AI tab → Settings → Configuration → *AI Memory* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `AI_MEMORY_ASSISTED_FILE` | a text box | in this section | AI_MEMORY_FILE is the pre-split name and is still honoured: while the assisted file does not exist, the legacy path is read instead, so an upgrade loses nothing. | @@ -504,13 +510,13 @@ Route: AI tab → Settings → Configuration → *AI Memory* ## AI Repair -In `master.conf`. - Reachable from: - Scheduler tab → **Ai Repair Sweep** → Config → *AI Repair* - AI tab → Settings → Configuration → *AI Repair* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `AI_REPAIR_ENABLED` | a switch | in this section | AI_REPAIR_AUTOFIX_ENABLED is what allows a value to be written unattended, and only ever a value a probe has answered on. Never a toggle: whether something should be switched on is a decision about intent, and a probe cannot prove intent the way it can prove a port answers. | @@ -518,13 +524,13 @@ Reachable from: ## AI Repair Findings -In `master.conf`. - Reachable from: - Scheduler tab → **Ai Repair Sweep** → Config → *AI Repair Findings* - AI tab → Settings → Configuration → *AI Repair Findings* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `AI_FINDING_RETAIN_DAYS` | a number box | in this section | Misconfigurations found in this installation, as opposed to defects in Varaverk — those go to ai_bugs. A finding is open until the configuration is right, and closes itself when the probe that proved the fault starts passing. Closed ones are kept for a while, because "this happened before and here is what fixed it" is worth more than the disk. Open findings are never pruned: an unresolved probl… | @@ -533,10 +539,10 @@ Reachable from: ## AI Repair: what it reads -In `master.conf`. - Route: AI tab → Settings → Configuration → *AI Repair: what it reads* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `AI_REPAIR_SYSLOG_ENABLED` | a switch | in this section | Both are bounded by time (since the last pass) and by a line cap, so a flood costs one pass. Tools/ai_log_check.sh replays this host's real logs against the patterns — run it after changing any of them. | @@ -546,14 +552,14 @@ Route: AI tab → Settings → Configuration → *AI Repair: what it reads* ## AI Retrieval Index -In `master.conf`. - Reachable from: - Scheduler tab → **Ai Index** → Config → *AI Retrieval Index* - Scheduler tab → **Ai Query** → Config → *AI Retrieval Index* - AI tab → Settings → Configuration → *AI Retrieval Index* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `AI_INDEX_DB` | a text box | in this section | Only git-tracked files are ever indexed. Configurations/, State_Files/ and data/ are gitignored, which is what makes it structurally impossible for a credential to reach the index: the files holding them were never in the repo. Do not "improve" this to a filesystem walk — an embedded secret cannot be rotated out of a vector. | @@ -564,20 +570,20 @@ Reachable from: ## AI Stored Conversations -In `master.conf`. - Route: AI tab → Settings → Configuration → *AI Stored Conversations* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `AI_CHAT_HISTORY_MAX` | a number box, in conversations, 1–50 | in this section | conversations kept — clamped to 1-50 | ## AI Token Accounting -In `master.conf`. - Route: AI tab → Settings → Configuration → *AI Token Accounting* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `AI_TOKEN_DB` | a text box | in this section | Retention is by row count rather than age: pruning is considered only when the file passes a size threshold, so an ordinary turn costs one stat() and an append. | @@ -586,10 +592,10 @@ Route: AI tab → Settings → Configuration → *AI Token Accounting* ## AI Web Search -In `master.conf`. - Route: AI tab → Settings → Configuration → *AI Web Search* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `AI_WEB_SEARCH_ENABLED` | a switch | in this section | Provider: degoog \| searxng \| brave \| tavily degoog self-hosted, no key — set HOST*_DEGOOG_URL. Aggregates several engines and returns them merged. The default, and the only one verified against a live service here searxng self-hosted, no key, no third party — set HOST*_SEARXNG_URL, and enable format: [json] in its own settings.yml, which the default image ships with off brave HOST*_WEB_SEARC… | @@ -599,14 +605,14 @@ Route: AI tab → Settings → Configuration → *AI Web Search* ## Arr Cleanup -In `master.conf`. - Reachable from: - Scheduler tab → **Radarr Cleanup** → Config → *Arr Cleanup* - Scheduler tab → **Lidarr Cleanup** → Config → *Arr Cleanup* - Scheduler tab → **Sonarr Cleanup** → Config → *Arr Cleanup* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `SONARR_VERSION_MAJOR` | a number box | in this section | API versions — update MAJOR version here when script is updated for a new arr version: Sonarr v4 → /api/v3/series → /api/v3/episodefile?seriesId=X Radarr v6 → /api/v3/movie → /api/v3/moviefile?movieId=X Lidarr v3 → /api/v1/artist → /api/v1/trackFile?artistId=X | @@ -686,13 +692,13 @@ Reachable from: ## Arr Content Classification (radarr/sonarr_classification_scan.sh) -In `master.conf`. - Reachable from: - Scheduler tab → **Radarr Classification Scan** → Config → *Arr Content Classification (radarr/sonarr_classification_scan.sh)* - Scheduler tab → **Sonarr Classification Scan** → Config → *Arr Content Classification (radarr/sonarr_classification_scan.sh)* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `RADARR_ANIME_STUDIOS` | a list, one entry per line | in this section | — | @@ -703,10 +709,10 @@ Reachable from: ## Arr Failed/Stalled Recovery -In `master.conf`. - Route: Scheduler tab → **Arrs Failed Stalled Recovery** → Config → *Arr Failed/Stalled Recovery* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `ARR_IMPORT_RECOVERY_AGE` | a number box, in hours | Arrs tab | hours — skip items newer than this | @@ -716,40 +722,40 @@ Route: Scheduler tab → **Arrs Failed Stalled Recovery** → Config → *Arr Fa ## Arr Full Library Rescan -In `master.conf`. - Route: Scheduler tab → **Arr Full Rescan** → Config → *Arr Full Library Rescan* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `ARR_FULL_RESCAN_TIMEOUT` | a number box, in seconds | in this section | seconds per arr — a full-library walk, not a single release | ## Array Start -In `master.conf`. - Route: Scheduler tab → **Array Started** → Config → *Array Start* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `ARRAY_START_SCRIPTS` | a list, one entry per line | in this section | Scripts launched by array_started.sh when the array comes online. Launched in order — each as a background process. One-shot scripts (ramdisk, syslog, fpm, inotify, network) run and exit naturally. Continuous scripts (failover) run until array stops. Watchdogs (resource_watchdog, docker_watchdog, system_watchdog) are cronned via watchdog_orchestrator.sh — NOT launched here. | ## Array Stop -In `master.conf`. - Route: Scheduler tab → **Array Stopping** → Config → *Array Stop* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `ARRAY_STOP_SCRIPTS` | a list, one entry per line | in this section | Scripts run by array_stopping.sh for a planned shutdown — stops everything cleanly in order. Run sequentially (foreground) — each must complete before the next starts. Order matters: user scripts first (prevents new ops), then data movement, then containers. | ## Backup Verify -In `master.conf`. - Route: Scheduler tab → **Backup Verify** → Config → *Backup Verify* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `BACKUP_VERIFY_SAMPLE` | a number box | in this section | random files to check per share | @@ -757,10 +763,10 @@ Route: Scheduler tab → **Backup Verify** → Config → *Backup Verify* ## Bandwidth Monitor -In `master.conf`. - Route: Scheduler tab → **Bandwidth Monitor** → Config → *Bandwidth Monitor* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `BANDWIDTH_LOG` | a text box | in this section | Called automatically by rsync.sh after each sync — one bounded write per run. Tracks transfer size, duration and profile per sync for weekly summary reporting. | @@ -772,13 +778,13 @@ Route: Scheduler tab → **Bandwidth Monitor** → Config → *Bandwidth Monitor ## Certificate Monitor -In `master.conf`. - Reachable from: - Scheduler tab → **Cert Monitor** → Config → *Certificate Monitor* - Scheduler tab → **Weekly Health Digest** → Config → *Certificate Monitor* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `CERT_WARN_DAYS` | a number box | in this section | warn when cert expires within this many days | @@ -787,10 +793,10 @@ Reachable from: ## Clear Logs -In `master.conf`. - Route: Scheduler tab → **Clear Logs** → Config → *Clear Logs* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `LOG_FILES` | a list, one entry per line | in this section | Size threshold approach — only clear if log exceeds threshold. Avoids destroying useful recent diagnostic context when logs are small. LOG_MIN_SIZE_MB: skip clearing if log is under this size (not worth clearing) LOG_DOCKER_MAX_MB: clear a container log only if it exceeds this size Docker logs grow fastest on active containers (Emby, SABnzbd, Sonarr) 100MB per container × 30 containers = 3GB be… | @@ -799,20 +805,20 @@ Route: Scheduler tab → **Clear Logs** → Config → *Clear Logs* ## Critical Sync Maintenance -In `master.conf`. - Route: Scheduler tab → **Critical Sync Maintenance** → Config → *Critical Sync Maintenance* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `CRITICAL_MAINTENANCE_SCRIPTS` | a list, one entry per line | in this section | critical_sync_maintenance.sh runs every 30 minutes. Order: CRITICAL_MAINTENANCE_SCRIPTS (jobs) → CRITICAL_SYNC_SHARES (rsync) → partnership --check partnership --check always runs last regardless of rsync gate. Comment out entries to disable without removing. | ## Daily Sync Maintenance -In `master.conf`. - Route: Scheduler tab → **Daily Sync Maintenance** → Config → *Daily Sync Maintenance* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `DAILY_MAINTENANCE_SCRIPTS` | a list, one entry per line | in this section | daily_sync_maintenance.sh runs media share sync first, then iterates DAILY_MAINTENANCE_SCRIPTS for all jobs. Schedule: 0 1 * * * (1am daily) | @@ -820,10 +826,10 @@ Route: Scheduler tab → **Daily Sync Maintenance** → Config → *Daily Sync M ## Docker Watchdog -In `master.conf`. - Route: Scheduler tab → **Docker Watchdog** → Config → *Docker Watchdog* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `WATCHDOG_STATE_FILE` | a text box | in this section | Strike state file — /tmp resets on reboot (correct — no stale strikes after reboot) | @@ -860,10 +866,10 @@ Route: Scheduler tab → **Docker Watchdog** → Config → *Docker Watchdog* ## Download Orphan Cleaner (arr_download_orphan_cleaner.sh) -In `master.conf`. - Route: Scheduler tab → **Arr Download Orphan Cleaner** → Config → *Download Orphan Cleaner (arr_download_orphan_cleaner.sh)* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `DOWNLOAD_ORPHAN_CLEANER_ENABLED` | a switch | in this section | Weekly sweep of the SABnzbd Completed folders Sonarr/Radarr import from — deletes junk and parse-verified already-in-library leftovers the arr queue no longer references, triggers import scans for anything the library is actually missing. Built 2026-07-26 after 755G of orphaned completed downloads (accumulating since 2022) filled HOST1's cache pool to 89%. Per-host dirs: HOST*_SONARR_DOWNLOAD_D… | @@ -873,10 +879,10 @@ Route: Scheduler tab → **Arr Download Orphan Cleaner** → Config → *Downloa ## Downloaders Reset -In `master.conf`. - Route: Scheduler tab → **Downloaders Reset** → Config → *Downloaders Reset* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `DOWNLOADER_RETENTION_DAYS` | a number box, in days | in this section | days — purge history older than this | @@ -885,10 +891,10 @@ Route: Scheduler tab → **Downloaders Reset** → Config → *Downloaders Reset ## Emby Session Report -In `master.conf`. - Route: Scheduler tab → **Emby Session Report** → Config → *Emby Session Report* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `EMBY_REPORT_DAYS` | a number box, in days | in this section | days to include in the report period | @@ -896,10 +902,10 @@ Route: Scheduler tab → **Emby Session Report** → Config → *Emby Session Re ## FALLBACK -In `master.conf`. - No single page shows this section. Individual settings below carry their own route. +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `EXTERNAL_IP` | a text box | — | — | @@ -911,10 +917,10 @@ No single page shows this section. Individual settings below carry their own rou ## Failover Test -In `master.conf`. - Route: Scheduler tab → **Fallback Test** → Config → *Failover Test* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `FALLBACK_TEST_BLOCK_WAIT` | a number box, in seconds | in this section | seconds to wait after blocking connectivity | @@ -922,10 +928,10 @@ Route: Scheduler tab → **Fallback Test** → Config → *Failover Test* ## Health Digest -In `master.conf`. - Route: Scheduler tab → **Weekly Health Digest** → Config → *Health Digest* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `DIGEST_PROFILE` | a dropdown (always, smart, weekly) | in this section | always \| smart \| weekly | @@ -937,30 +943,30 @@ Route: Scheduler tab → **Weekly Health Digest** → Config → *Health Digest* ## Intermediate Sync Maintenance -In `master.conf`. - Route: Scheduler tab → **Intermediate Sync Maintenance** → Config → *Intermediate Sync Maintenance* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `INTERMEDIATE_MAINTENANCE_SCRIPTS` | a list, one entry per line | in this section | — | ## LOGGING -In `master.conf`. - No single page shows this section. Individual settings below carry their own route. +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `ENABLE_LOGGING` | a switch | Settings tab | Controls verbose [LOG] output across all scripts. true = show detailed [LOG] lines — useful for debugging or first-time setup false = show only user-facing output — cleaner for scheduled runs | ## Media Cleaner -In `master.conf`. - Route: Scheduler tab → **Media Cleaner** → Config → *Media Cleaner* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `ANIME_FILE_PATTERNS` | a list, one entry per line | in this section | — | @@ -968,14 +974,14 @@ Route: Scheduler tab → **Media Cleaner** → Config → *Media Cleaner* ## Media Permissions -In `master.conf`. - Reachable from: - Scheduler tab → **Media Shares Permissions** → Config → *Media Permissions* - Scheduler tab → **Bulk Permissions Repair** → Config → *Media Permissions* - Scheduler tab → **Trailer Folder Migration** → Config → *Media Permissions* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `PERMISSIONS_DIR_MODE` | a text box | in this section | directories — traverse + list, no world-write | @@ -984,10 +990,10 @@ Reachable from: ## Monthly Maintenance -In `master.conf`. - Route: Scheduler tab → **Monthly Maintenance** → Config → *Monthly Maintenance* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `MONTHLY_MAINTENANCE_SCRIPTS` | a list, one entry per line | in this section | monthly_maintenance.sh fires only when BOTH gates pass: 1. Server uptime >= MONTHLY_UPTIME_THRESHOLD_DAYS days 2. Last run was >= MONTHLY_RUN_INTERVAL_DAYS days ago (or never run) Cron: 0 0 15 * * (15th of the month, midnight — script self-gates, so a spare run is safe) NOT in WATCHDOG_ORCHESTRATOR_SCRIPTS — has its own cron entry. Add scripts that require a long-stable settled system — scrubs,… | @@ -997,20 +1003,20 @@ Route: Scheduler tab → **Monthly Maintenance** → Config → *Monthly Mainten ## Mover -In `master.conf`. - Route: Scheduler tab → **Mover Stop** → Config → *Mover* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `MOVER_STOP_TIMEOUT` | a number box, in seconds | in this section | Seconds to wait before mover_stop.sh sends SIGTERM to the mover process. Gives mover time to finish current file transfer before being interrupted. | ## NOTIFICATIONS -In `master.conf`. - No single page shows this section. Individual settings below carry their own route. +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `NOTIFY_UNRAID` | a switch | Settings tab | unRAID native notification system — integrates with the bell icon in the WebGUI. normal = job completed successfully / warning = something failed or needs attention | @@ -1019,10 +1025,10 @@ No single page shows this section. Individual settings below carry their own rou ## Network Watchdog -In `master.conf`. - Route: Scheduler tab → **Network Watchdog** → Config → *Network Watchdog* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `NETWORK_WATCHDOG_ENABLED` | a switch | in this section | Services-layer connectivity — internet reachability, DDNS sync, Tailscale, NPM proxy. Host-specific values (domain, container, NPM URL) live in host*.conf. | @@ -1035,20 +1041,20 @@ Route: Scheduler tab → **Network Watchdog** → Config → *Network Watchdog* ## OOM Bypass Settings -In `master.conf`. - Route: Scheduler tab → **Stability Watchdog** → Config → *OOM Bypass Settings* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `SYS_WATCHDOG_OOM_LIMIT` | a number box | in this section | OOM kills in one cycle to trigger bypass | ## PARTNERSHIP -In `master.conf`. - Route: Partnership tab → Array Settings → *PARTNERSHIP* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `PARTNERSHIP_ENABLED` | a switch | Fallback tab | — | @@ -1073,10 +1079,10 @@ Route: Partnership tab → Array Settings → *PARTNERSHIP* ## PHP-FPM -In `master.conf`. - Route: Scheduler tab → **Php Fpm Max Children** → Config → *PHP-FPM* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `PHP_CONF` | a text box | in this section | Higher max_children allows more concurrent PHP requests to the unRAID WebGUI. Default is very low — increasing it prevents WebGUI slowdowns under load. 250 is safe for servers with 32GB+ RAM. | @@ -1084,10 +1090,10 @@ Route: Scheduler tab → **Php Fpm Max Children** → Config → *PHP-FPM* ## Play State Sync -In `master.conf`. - Route: Scheduler tab → **Play State Sync** → Config → *Play State Sync* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `PLAY_SYNC_ENABLED` | a switch | in this section | — | @@ -1099,13 +1105,13 @@ Route: Scheduler tab → **Play State Sync** → Config → *Play State Sync* ## Play State Sync — Handback -In `master.conf`. - Reachable from: - Scheduler tab → **Play State Sync** → Config → *Play State Sync — Handback* - Scheduler tab → **Fallback** → Config → *Play State Sync — Handback* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `PLAY_SYNC_HANDBACK_RETRIES` | a number box, in attempts | in this section | attempts before giving up and proceeding to DNS cutover | @@ -1113,10 +1119,10 @@ Reachable from: ## Pressure Thresholds -In `master.conf`. - Route: Scheduler tab → **Resource Watchdog** → Config → *Pressure Thresholds* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `RW_RAM_SOFT_GB` | a number box | in this section | throttle start — reduce background load | @@ -1129,20 +1135,20 @@ Route: Scheduler tab → **Resource Watchdog** → Config → *Pressure Threshol ## RAM Reboot Threshold -In `master.conf`. - Route: Scheduler tab → **Stability Watchdog** → Config → *RAM Reboot Threshold* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `SYS_WATCHDOG_MEM_GB` | a number box | in this section | strike system → reboot | ## Reboot -In `master.conf`. - Route: Scheduler tab → **Server Reboot** → Config → *Reboot* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `REBOOT_SLEEP` | a number box, in seconds | in this section | Seconds of warning broadcast to logged-in users before server_reboot.sh reboots. Gives users time to save work — 300s = 5 minutes. | @@ -1150,10 +1156,10 @@ Route: Scheduler tab → **Server Reboot** → Config → *Reboot* ## Rsync Defaults -In `master.conf`. - Route: Scheduler tab → **Rsync** → Config → *Rsync Defaults* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `BW_LIMIT` | a number box, in kb | Rsync tab | KB/s — 12500 ≈ 100Mbit | @@ -1169,10 +1175,10 @@ Route: Scheduler tab → **Rsync** → Config → *Rsync Defaults* ## Rsync Enable/Disable -In `master.conf`. - Route: Scheduler tab → **Rsync** → Config → *Rsync Enable/Disable* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `RSYNC_ENABLED` | a switch | in this section | Tier 1 — global gate, overrides everything below | @@ -1185,20 +1191,20 @@ Route: Scheduler tab → **Rsync** → Config → *Rsync Enable/Disable* ## Rsync Merge Auto-Promote -In `master.conf`. - Route: Scheduler tab → **Rsync** → Config → *Rsync Merge Auto-Promote* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `RSYNC_MERGE_ENABLED` | a switch | in this section | When enabled, rsync.sh pre-scans the remote before syncing and promotes to merge mode (pull-then-push) if ≥75% of remote top-level entries exist locally. Named profiles are always excluded from auto-promote regardless of this toggle. | ## Rsync Profile System -In `master.conf`. - Route: Scheduler tab → **Rsync** → Config → *Rsync Profile System* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `PROFILE_RSYNC_OPTS` | a list, one entry per line | in this section | — | @@ -1212,10 +1218,10 @@ Route: Scheduler tab → **Rsync** → Config → *Rsync Profile System* ## SABnzbd Throttle -In `master.conf`. - Route: Scheduler tab → **Resource Watchdog** → Config → *SABnzbd Throttle* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `RW_SABNZBD_ENABLED` | a switch | in this section | Speed values: "50M" = 50 MB/s, "0" = unlimited | @@ -1224,10 +1230,10 @@ Route: Scheduler tab → **Resource Watchdog** → Config → *SABnzbd Throttle* ## SMART Health -In `master.conf`. - Route: Scheduler tab → **Smart Health** → Config → *SMART Health* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `SMART_TEMP_WARN` | a number box | in this section | fallback — Celsius warn threshold | @@ -1235,10 +1241,10 @@ Route: Scheduler tab → **Smart Health** → Config → *SMART Health* ## Strike and Reboot Loop Settings -In `master.conf`. - Route: Scheduler tab → **Stability Watchdog** → Config → *Strike and Reboot Loop Settings* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `SYS_WATCHDOG_STRIKE_LIMIT` | a number box, in consecutive | in this section | consecutive failures before reboot trigger | @@ -1247,30 +1253,30 @@ Route: Scheduler tab → **Stability Watchdog** → Config → *Strike and Reboo ## Sunday Morning Coffee Report -In `master.conf`. - Route: Scheduler tab → **Sunday Morning Coffee Report** → Config → *Sunday Morning Coffee Report* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `COFFEE_REPORT_SCRIPTS` | a list, one entry per line | in this section | Orchestrator that runs all Sunday monitor scripts in sequence. Schedule: 0 7 * * 0 (Sunday 7am — after weekly_sync_maintenance.sh finishes at ~3am) Each script runs independently and notifies on its own findings. | ## Syslog Filter -In `master.conf`. - Route: Scheduler tab → **Docker Syslog Filter** → Config → *Syslog Filter* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `FILTER_FILE` | a text box | in this section | Path for the rsyslog filter file that suppresses Docker veth interface noise. Docker creates a new veth interface for each container — generates hundreds of log lines per hour that have no diagnostic value. Filter removes them at source. | ## System Tuning Monitor -In `master.conf`. - Route: Scheduler tab → **System Tuning Monitor** → Config → *System Tuning Monitor* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `INOTIFY_WARN_PCT` | a number box | in this section | warn if inotify instances exceed this % of limit | @@ -1280,33 +1286,33 @@ Route: Scheduler tab → **System Tuning Monitor** → Config → *System Tuning ## System Watchdog -In `master.conf`. - Route: Scheduler tab → **Watchdog Orchestrator** → Config → *System Watchdog* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `SYSTEM_WATCHDOG_SCRIPTS` | a list, one entry per line | in this section | system_watchdog.sh runs SYSTEM_WATCHDOG_SCRIPTS sequentially each cycle. Called by watchdog_orchestrator.sh — not scheduled directly. | ## Transcode Management -In `master.conf`. - Route: Scheduler tab → **Transcode Management** → Config → *Transcode Management* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `TRANSCODE_MANAGEMENT_SCRIPTS` | a list, one entry per line | in this section | transcode_management.sh runs TRANSCODE_MANAGEMENT_SCRIPTS in order each cron cycle. Schedule: */7 * * * * (every 7 minutes) Order matters — cleanup first so the manager measures real current ramdisk usage, not usage inflated by stale segment files from ended sessions. | ## Transcode Manager -In `master.conf`. - Reachable from: - Scheduler tab → **Transcode Management** → Config → *Transcode Manager* - Scheduler tab → **Transcode Manager** → Config → *Transcode Manager* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `RAMDISK_PATH` | a text box | in this section | tmpfs mount point — created at array start by ramdisk_setup.sh. Must exist before Emby starts so the symlink resolves correctly. | @@ -1325,20 +1331,20 @@ Reachable from: ## Watchdog Orchestrator -In `master.conf`. - Route: Scheduler tab → **Watchdog Orchestrator** → Config → *Watchdog Orchestrator* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `WATCHDOG_ORCHESTRATOR_SCRIPTS` | a list, one entry per line | in this section | watchdog_orchestrator.sh runs WATCHDOG_ORCHESTRATOR_SCRIPTS in order each cron cycle. Schedule: */15 * * * * (every 15 minutes) NOT in ARRAY_START_SCRIPTS — has its own cron entry. Order matters — resource first (frees pressure), docker second (heals with freed resources), system third (storage + webgui component health), stability last (last line of defense). | ## WebGUI Watchdog -In `master.conf`. - Route: Scheduler tab → **Webgui Watchdog** → Config → *WebGUI Watchdog* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `WEBGUI_URL` | a text box | in this section | Monitors unRAID WebGUI responsiveness — escalates through nginx restart → emhttp restart. Separate from docker_watchdog — this monitors the unRAID UI itself, not containers. | @@ -1349,10 +1355,10 @@ Route: Scheduler tab → **Webgui Watchdog** → Config → *WebGUI Watchdog* ## Weekly Sync Maintenance -In `master.conf`. - Route: Scheduler tab → **Weekly Sync Maintenance** → Config → *Weekly Sync Maintenance* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `WEEKLY_MAINTENANCE_SCRIPTS` | a list, one entry per line | in this section | weekly_sync_maintenance.sh stops containers both sides → pulls updates → syncs WEEKLY_SYNC_SHARES → restarts → then iterates WEEKLY_MAINTENANCE_SCRIPTS. Schedule: 30 2 * * 0 (Sunday 2:30am) | @@ -1366,10 +1372,10 @@ Route: Scheduler tab → **Weekly Sync Maintenance** → Config → *Weekly Sync ## ZFS Memory Snapshot -In `master.conf`. - Route: Scheduler tab → **Zfs Memory Snapshot** → Config → *ZFS Memory Snapshot* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `ZFS_REPORT_LOG` | a text box | in this section | Weekly ZFS pool health and memory diagnostic report — informational only. | @@ -1380,10 +1386,10 @@ Route: Scheduler tab → **Zfs Memory Snapshot** → Config → *ZFS Memory Snap ## inotify Tuning -In `master.conf`. - Route: Scheduler tab → **Inotify Tuning** → Config → *inotify Tuning* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `INOTIFY_MAX_INSTANCES` | a number box | in this section | default: 128 — max inotify instances per user | @@ -1392,10 +1398,10 @@ Route: Scheduler tab → **Inotify Tuning** → Config → *inotify Tuning* ## qBittorrent Throttle -In `master.conf`. - Route: Scheduler tab → **Resource Watchdog** → Config → *qBittorrent Throttle* +Saved into `master.conf`, which does not need to be opened by hand. + | Setting | Control | Where | What it does | |---|---|---|---| | `RW_QBIT_ENABLED` | a switch | in this section | KB/s — 0 = unlimited |