fix widespread naming errors across all docs — array_started, fallback, FALLBACK_
array_start.sh → array_started.sh (bulk rename — actual file has always been array_started.sh; docs consistently used the wrong name across 9 files) failover.sh → fallback.sh (bulk rename — script is Fallback/fallback.sh; docs used the old name throughout) FAILOVER_HOST2_RUNS_FOR_HOST1_TIER1 → FALLBACK_HOST2_COVERS_HOST1_TIER1 (README.md — wrong variable name, actual vars use FALLBACK_ prefix and COVERS_ not RUNS_FOR_) docker_watchdog.sh attribution: "started by array_started.sh" → "called every minute by watchdog_orchestrator.sh" (docker_watchdog is not in ARRAY_START_SCRIPTS) server_reboot.sh shutdown sequence: step 7 "rc.docker stop" → calls array_stopping.sh (user_scripts, fallback, rsync, mover, docker_container_stop) Rsync manual ARRAY_START_SCRIPTS list: removed stability_watchdog and docker_watchdog (now in watchdog_orchestrator); failover → fallback
This commit is contained in:
@@ -591,7 +591,7 @@ errors are always visible regardless of `--log`.
|
|||||||
### fallback.sh
|
### fallback.sh
|
||||||
|
|
||||||
`fallback.sh`
|
`fallback.sh`
|
||||||
Normal start — continuous loop. Start via User Scripts plugin or array_start.sh. **Do NOT
|
Normal start — continuous loop. Start via User Scripts plugin or array_started.sh. **Do NOT
|
||||||
stop by killing the process** — state file may be left inconsistent. Stop via User Scripts
|
stop by killing the process** — state file may be left inconsistent. Stop via User Scripts
|
||||||
Abort only.
|
Abort only.
|
||||||
|
|
||||||
|
|||||||
@@ -242,7 +242,7 @@ movement required. The fallback and rsync scripts are configuration-driven.
|
|||||||
|
|
||||||
| Script | Role | When It Runs |
|
| Script | Role | When It Runs |
|
||||||
|--------|------|--------------|
|
|--------|------|--------------|
|
||||||
| `fallback.sh` | Continuous state machine — monitors remote, manages fallback and handback | Continuously (started by `array_start.sh`) |
|
| `fallback.sh` | Continuous state machine — monitors remote, manages fallback and handback | Continuously (started by `array_started.sh`) |
|
||||||
| `fallback_test.sh` | 7-phase test harness — validates the entire fallback lifecycle via iptables simulation | On demand — maintenance window only |
|
| `fallback_test.sh` | 7-phase test harness — validates the entire fallback lifecycle via iptables simulation | On demand — maintenance window only |
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -250,7 +250,7 @@ movement required. The fallback and rsync scripts are configuration-driven.
|
|||||||
## ━━━ HOW THE SCRIPTS RELATE ━━━
|
## ━━━ HOW THE SCRIPTS RELATE ━━━
|
||||||
|
|
||||||
```
|
```
|
||||||
array_start.sh
|
array_started.sh
|
||||||
│
|
│
|
||||||
└── starts fallback.sh (continuous loop)
|
└── starts fallback.sh (continuous loop)
|
||||||
│
|
│
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ filter might run after containers have already created veth interfaces. PHP-FPM
|
|||||||
tuning might run after the WebGUI has already served its first requests. Each
|
tuning might run after the WebGUI has already served its first requests. Each
|
||||||
script competes for the same startup slot with no guaranteed order.
|
script competes for the same startup slot with no guaranteed order.
|
||||||
|
|
||||||
The fix: `array_start.sh` is the only "At Startup of Array" entry. It launches
|
The fix: `array_started.sh` is the only "At Startup of Array" entry. It launches
|
||||||
every startup script in a defined order, with one-second settle between each, and
|
every startup script in a defined order, with one-second settle between each, and
|
||||||
reports which succeeded and which failed. Order is guaranteed. Nothing starts before
|
reports which succeeded and which failed. Order is guaranteed. Nothing starts before
|
||||||
its dependency. Everything is visible in a single summary.
|
its dependency. Everything is visible in a single summary.
|
||||||
@@ -99,7 +99,7 @@ The User Scripts plugin contains exactly these entries:
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# At Startup of Array — single entry for all startup scripts:
|
# At Startup of Array — single entry for all startup scripts:
|
||||||
array_start.sh
|
array_started.sh
|
||||||
|
|
||||||
# Cron — one entry per maintenance window:
|
# Cron — one entry per maintenance window:
|
||||||
*/3 * * * * transcode_management.sh
|
*/3 * * * * transcode_management.sh
|
||||||
@@ -178,7 +178,7 @@ without `--log`.
|
|||||||
---
|
---
|
||||||
|
|
||||||
## ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
## ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
## 🚀 array_start.sh
|
## 🚀 array_started.sh
|
||||||
## ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
## ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
|
||||||
Single "At Startup of Array" entry for the entire ecosystem. Launches every startup
|
Single "At Startup of Array" entry for the entire ecosystem. Launches every startup
|
||||||
@@ -265,16 +265,16 @@ ARRAY_START_SCRIPTS=(
|
|||||||
```bash
|
```bash
|
||||||
# ─────────────────────────────────────────────────────────────────────────────
|
# ─────────────────────────────────────────────────────────────────────────────
|
||||||
# Normal — called by User Scripts at array start. Never run manually in production.
|
# Normal — called by User Scripts at array start. Never run manually in production.
|
||||||
# array_start.sh runs once and exits — the continuous scripts it launched
|
# array_started.sh runs once and exits — the continuous scripts it launched
|
||||||
# keep running as background processes.
|
# keep running as background processes.
|
||||||
# ─────────────────────────────────────────────────────────────────────────────
|
# ─────────────────────────────────────────────────────────────────────────────
|
||||||
array_start.sh
|
array_started.sh
|
||||||
|
|
||||||
# ─────────────────────────────────────────────────────────────────────────────
|
# ─────────────────────────────────────────────────────────────────────────────
|
||||||
# Dry run — show what would be launched, in order, without launching anything.
|
# Dry run — show what would be launched, in order, without launching anything.
|
||||||
# Use to verify the ARRAY_START_SCRIPTS list before an array restart.
|
# Use to verify the ARRAY_START_SCRIPTS list before an array restart.
|
||||||
# ─────────────────────────────────────────────────────────────────────────────
|
# ─────────────────────────────────────────────────────────────────────────────
|
||||||
array_start.sh --dry-run
|
array_started.sh --dry-run
|
||||||
|
|
||||||
# ─────────────────────────────────────────────────────────────────────────────
|
# ─────────────────────────────────────────────────────────────────────────────
|
||||||
# Status — show each configured script with its current running state.
|
# Status — show each configured script with its current running state.
|
||||||
@@ -282,7 +282,7 @@ array_start.sh --dry-run
|
|||||||
# not running — one-shot that has completed, or continuous not yet started
|
# not running — one-shot that has completed, or continuous not yet started
|
||||||
# FILE NOT FOUND — script path wrong or missing
|
# FILE NOT FOUND — script path wrong or missing
|
||||||
# ─────────────────────────────────────────────────────────────────────────────
|
# ─────────────────────────────────────────────────────────────────────────────
|
||||||
array_start.sh --status
|
array_started.sh --status
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -660,7 +660,7 @@ DAILY_MAINTENANCE_SCRIPTS=(
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# ─────────────────────────────────────────────────────────────────────────────
|
# ─────────────────────────────────────────────────────────────────────────────
|
||||||
# The same HOST*_DAILY_SYNC_SHARES lists are used by failover.sh for Tier 4
|
# The same HOST*_DAILY_SYNC_SHARES lists are used by fallback.sh for Tier 4
|
||||||
# writeback — but in the opposite direction.
|
# writeback — but in the opposite direction.
|
||||||
#
|
#
|
||||||
# Normal (daily_sync_maintenance.sh):
|
# Normal (daily_sync_maintenance.sh):
|
||||||
@@ -896,7 +896,7 @@ media_management.sh --status # show configured job list and exit
|
|||||||
# ─────────────────────────────────────────────────────────────────────────────
|
# ─────────────────────────────────────────────────────────────────────────────
|
||||||
# At Startup of Array — single entry:
|
# At Startup of Array — single entry:
|
||||||
# ─────────────────────────────────────────────────────────────────────────────
|
# ─────────────────────────────────────────────────────────────────────────────
|
||||||
array_start.sh
|
array_started.sh
|
||||||
|
|
||||||
# ─────────────────────────────────────────────────────────────────────────────
|
# ─────────────────────────────────────────────────────────────────────────────
|
||||||
# Frequent — every 3 minutes:
|
# Frequent — every 3 minutes:
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ Background: YES — required (starts continuous background processes)
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
/mnt/user/appdata/unraid_scripts/Orchestrators/array_start.sh
|
/mnt/user/appdata/unraid_scripts/Orchestrators/array_started.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
**What it does:**
|
**What it does:**
|
||||||
@@ -113,7 +113,7 @@ ramdisk_setup.sh — creates /mnt/ramdisk_transcodes and symlink before
|
|||||||
docker_network_connect.sh— ensures custom networks exist + containers connected
|
docker_network_connect.sh— ensures custom networks exist + containers connected
|
||||||
stability_watchdog.sh ← last-resort — three-tier server stability watchdog
|
stability_watchdog.sh ← last-resort — three-tier server stability watchdog
|
||||||
docker_watchdog.sh ← continuous — two-tier container healing watchdog
|
docker_watchdog.sh ← continuous — two-tier container healing watchdog
|
||||||
failover.sh ← continuous — mutual failover state machine
|
fallback.sh ← continuous — mutual failover state machine
|
||||||
```
|
```
|
||||||
|
|
||||||
**After running:**
|
**After running:**
|
||||||
@@ -659,7 +659,7 @@ that survive rsync updates without parser changes.
|
|||||||
## 🔄 FAILOVER
|
## 🔄 FAILOVER
|
||||||
## ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
## ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
|
||||||
> **failover.sh is started by array_start.sh — not scheduled separately.**
|
> **fallback.sh is started by array_started.sh — not scheduled separately.**
|
||||||
> These entries exist for manual control and testing only.
|
> These entries exist for manual control and testing only.
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -869,10 +869,10 @@ No profile container stop required. Incremental — safe to run at any time.
|
|||||||
## 🐳 DOCKER_ESSENTIALS
|
## 🐳 DOCKER_ESSENTIALS
|
||||||
## ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
## ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
|
||||||
> **docker_watchdog.sh is started by array_start.sh — not scheduled separately.**
|
> **docker_watchdog.sh is called every minute by watchdog_orchestrator.sh — not scheduled separately.**
|
||||||
> docker_daily_restart.sh is called by daily_sync_maintenance.sh.
|
> docker_daily_restart.sh is called by daily_sync_maintenance.sh.
|
||||||
> docker_weekly_restart.sh is called by weekly_sync_maintenance.sh.
|
> docker_weekly_restart.sh is called by weekly_sync_maintenance.sh.
|
||||||
> docker_network_connect.sh is called by array_start.sh.
|
> docker_network_connect.sh is called by array_started.sh.
|
||||||
> These entries exist for manual control only.
|
> These entries exist for manual control only.
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -969,7 +969,7 @@ Dispatcharr-Basic, ErsatzTV-Emby — services that degrade with uptime.
|
|||||||
```
|
```
|
||||||
Category: Docker_Essentials
|
Category: Docker_Essentials
|
||||||
Name: docker_network_connect_manual
|
Name: docker_network_connect_manual
|
||||||
Schedule: None — run manually (runs automatically via array_start.sh)
|
Schedule: None — run manually (runs automatically via array_started.sh)
|
||||||
Background: NO
|
Background: NO
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -1143,7 +1143,7 @@ Host-aware: HOST1 manages Movies, HOST2 manages Anime_Movies.
|
|||||||
## 🎬 TRANSCODES
|
## 🎬 TRANSCODES
|
||||||
## ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
## ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
|
||||||
> **ramdisk_setup.sh is called by array_start.sh — not scheduled separately.**
|
> **ramdisk_setup.sh is called by array_started.sh — not scheduled separately.**
|
||||||
> **transcode_manager.sh and transcode_cleanup.sh are called by transcode_management.sh.**
|
> **transcode_manager.sh and transcode_cleanup.sh are called by transcode_management.sh.**
|
||||||
> These entries exist for manual status checks and emergency use.
|
> These entries exist for manual status checks and emergency use.
|
||||||
|
|
||||||
@@ -1197,7 +1197,7 @@ flip count, session split ramdisk vs SSD).
|
|||||||
|
|
||||||
> **stability_watchdog.sh is called by watchdog_orchestrator.sh — not scheduled separately.**
|
> **stability_watchdog.sh is called by watchdog_orchestrator.sh — not scheduled separately.**
|
||||||
> **webgui_watchdog.sh, system_tuning_monitor.sh, clear_logs.sh are scheduled below.**
|
> **webgui_watchdog.sh, system_tuning_monitor.sh, clear_logs.sh are scheduled below.**
|
||||||
> **inotify_tuning.sh, php_fpm_max_children.sh, docker_syslog_filter.sh run via array_start.sh.**
|
> **inotify_tuning.sh, php_fpm_max_children.sh, docker_syslog_filter.sh run via array_started.sh.**
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -1616,7 +1616,7 @@ automatically at 1am as the first job in the window.
|
|||||||
|
|
||||||
**Only one entry needed at startup:** `array_start`. It handles everything.
|
**Only one entry needed at startup:** `array_start`. It handles everything.
|
||||||
|
|
||||||
`array_start.sh` is the single "At Startup of Array" entry. It reads ARRAY_START_SCRIPTS
|
`array_started.sh` is the single "At Startup of Array" entry. It reads ARRAY_START_SCRIPTS
|
||||||
from master.conf and launches each in order. No other startup entries. No dragging to
|
from master.conf and launches each in order. No other startup entries. No dragging to
|
||||||
reorder individual scripts. Change the order by editing master.conf.
|
reorder individual scripts. Change the order by editing master.conf.
|
||||||
|
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ break silently.
|
|||||||
Dispatcharr # shared Live TV scheduler
|
Dispatcharr # shared Live TV scheduler
|
||||||
```
|
```
|
||||||
|
|
||||||
When `failover.sh` on HOST2 reads `FAILOVER_HOST2_RUNS_FOR_HOST1_TIER1=(..."Emby"...)`,
|
When `fallback.sh` on HOST2 reads `FALLBACK_HOST2_COVERS_HOST1_TIER1=(..."Emby"...)`,
|
||||||
it looks for a container called exactly `Emby` and starts it. HOST2 must have a
|
it looks for a container called exactly `Emby` and starts it. HOST2 must have a
|
||||||
container called `Emby` — not `Emby-Gmer4Lfe`, not `Emby-HOST1`, just `Emby` — with
|
container called `Emby` — not `Emby-Gmer4Lfe`, not `Emby-HOST1`, just `Emby` — with
|
||||||
its volume mounts pointing at the mirrored share paths. This is what makes one
|
its volume mounts pointing at the mirrored share paths. This is what makes one
|
||||||
@@ -107,7 +107,7 @@ the suffix makes the owner unambiguous. Scripts targeting `Emby` and scripts tar
|
|||||||
# The entire ecosystem uses container names as identifiers.
|
# The entire ecosystem uses container names as identifiers.
|
||||||
# docker_watchdog.sh: WATCHDOG_REQUIRED_CONTAINERS=("NginxProxyManager" "Authelia")
|
# docker_watchdog.sh: WATCHDOG_REQUIRED_CONTAINERS=("NginxProxyManager" "Authelia")
|
||||||
# → looks for exactly "NginxProxyManager" on the running server
|
# → looks for exactly "NginxProxyManager" on the running server
|
||||||
# failover.sh: FAILOVER_HOST2_RUNS_FOR_HOST1_TIER1=("Emby" "VaultWarden")
|
# fallback.sh: FALLBACK_HOST2_COVERS_HOST1_TIER1=("Emby" "VaultWarden")
|
||||||
# → looks for exactly "Emby" and "VaultWarden" on HOST2
|
# → looks for exactly "Emby" and "VaultWarden" on HOST2
|
||||||
# docker_daily_restart.sh: DAILY_RESTART_CONTAINERS=("Dispatcharr" "Authelia")
|
# docker_daily_restart.sh: DAILY_RESTART_CONTAINERS=("Dispatcharr" "Authelia")
|
||||||
# → looks for exactly those names in docker ps
|
# → looks for exactly those names in docker ps
|
||||||
@@ -365,7 +365,7 @@ This is not standby. This is mutual coverage between peers.
|
|||||||
# Things conventional failover provides that this does NOT:
|
# Things conventional failover provides that this does NOT:
|
||||||
# Zero RPO (recovery point objective) — there is ~15min of potential staleness
|
# Zero RPO (recovery point objective) — there is ~15min of potential staleness
|
||||||
# Synchronous state replication — changes don't reach HOST2 instantly
|
# Synchronous state replication — changes don't reach HOST2 instantly
|
||||||
# Automatic failure detection in seconds — failover.sh checks every 2 minutes
|
# Automatic failure detection in seconds — fallback.sh checks every 2 minutes
|
||||||
# Transparent IP migration — DNS TTL means up to 1 minute of routing to old IP
|
# Transparent IP migration — DNS TTL means up to 1 minute of routing to old IP
|
||||||
#
|
#
|
||||||
# What you get instead:
|
# What you get instead:
|
||||||
@@ -380,7 +380,7 @@ This is not standby. This is mutual coverage between peers.
|
|||||||
|
|
||||||
## ━━━ HOW FAILOVER ACTUALLY WORKS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
## ━━━ HOW FAILOVER ACTUALLY WORKS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
|
||||||
`failover.sh` runs on both servers as a continuous background process. Every 2 minutes
|
`fallback.sh` runs on both servers as a continuous background process. Every 2 minutes
|
||||||
it pings two things: the other server's Tailscale IP, and `8.8.8.8`. The combination
|
it pings two things: the other server's Tailscale IP, and `8.8.8.8`. The combination
|
||||||
of those two answers determines the current state.
|
of those two answers determines the current state.
|
||||||
|
|
||||||
@@ -465,7 +465,7 @@ Failover coverage:
|
|||||||
Monitoring:
|
Monitoring:
|
||||||
Both servers resource/docker/system/ resource/docker/system/
|
Both servers resource/docker/system/ resource/docker/system/
|
||||||
stability_watchdog.sh stability_watchdog.sh
|
stability_watchdog.sh stability_watchdog.sh
|
||||||
failover.sh failover.sh
|
fallback.sh fallback.sh
|
||||||
Sunday morning coffee report Sunday morning coffee report
|
Sunday morning coffee report Sunday morning coffee report
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -558,13 +558,13 @@ Arbiter runs only orchestrators — never individual scripts directly.
|
|||||||
|
|
||||||
```
|
```
|
||||||
At Startup of Array:
|
At Startup of Array:
|
||||||
array_start.sh launches all startup scripts in order
|
array_started.sh launches all startup scripts in order
|
||||||
→ inotify_tuning.sh raise kernel limits before containers start
|
→ inotify_tuning.sh raise kernel limits before containers start
|
||||||
→ docker_syslog_filter.sh suppress veth noise before containers create interfaces
|
→ docker_syslog_filter.sh suppress veth noise before containers create interfaces
|
||||||
→ php_fpm_max_children.sh WebGUI tuning before first request
|
→ php_fpm_max_children.sh WebGUI tuning before first request
|
||||||
→ ramdisk_setup.sh create ramdisk before Emby starts
|
→ ramdisk_setup.sh create ramdisk before Emby starts
|
||||||
→ docker_network_connect.sh connect containers to extra networks
|
→ docker_network_connect.sh connect containers to extra networks
|
||||||
→ failover.sh continuous — mutual failover state machine
|
→ fallback.sh continuous — mutual failover state machine
|
||||||
|
|
||||||
Every minute:
|
Every minute:
|
||||||
watchdog_orchestrator.sh fires each watchdog in sequence
|
watchdog_orchestrator.sh fires each watchdog in sequence
|
||||||
@@ -619,7 +619,7 @@ Throughout the day (every minute via watchdog_orchestrator.sh):
|
|||||||
stability_watchdog.sh watching: RAM, CPU temp, rootfs, kernel, daemon
|
stability_watchdog.sh watching: RAM, CPU temp, rootfs, kernel, daemon
|
||||||
|
|
||||||
Throughout the day:
|
Throughout the day:
|
||||||
failover.sh watching: remote server, internet connectivity
|
fallback.sh watching: remote server, internet connectivity
|
||||||
transcode_management.sh managing: ramdisk ↔ SSD, session cleanup (every 3min)
|
transcode_management.sh managing: ramdisk ↔ SSD, session cleanup (every 3min)
|
||||||
critical_sync_maintenance.sh keeping: auth stack + Emby current (every 15min)
|
critical_sync_maintenance.sh keeping: auth stack + Emby current (every 15min)
|
||||||
|
|
||||||
@@ -671,7 +671,7 @@ Problem: Docker daemon hung
|
|||||||
→ If still hung: immediate reboot (no strikes needed — daemon can't be managed)
|
→ If still hung: immediate reboot (no strikes needed — daemon can't be managed)
|
||||||
|
|
||||||
Problem: HOST1 loses power
|
Problem: HOST1 loses power
|
||||||
→ failover.sh on HOST2 detects at next 2-minute check
|
→ fallback.sh on HOST2 detects at next 2-minute check
|
||||||
→ Tier 1 starts immediately: DDNS, Emby, VaultWarden, Live TV
|
→ Tier 1 starts immediately: DDNS, Emby, VaultWarden, Live TV
|
||||||
→ Household barely notices. Live TV may buffer for < 2 minutes.
|
→ Household barely notices. Live TV may buffer for < 2 minutes.
|
||||||
```
|
```
|
||||||
@@ -732,7 +732,7 @@ Things that are different from what you might expect:
|
|||||||
# ─────────────────────────────────────────────────────────────────────────────
|
# ─────────────────────────────────────────────────────────────────────────────
|
||||||
# 1. Arbiter has very few entries.
|
# 1. Arbiter has very few entries.
|
||||||
# Everything runs through orchestrators. Individual scripts are never
|
# Everything runs through orchestrators. Individual scripts are never
|
||||||
# scheduled directly. array_start.sh is the only "At Startup of Array" entry.
|
# scheduled directly. array_started.sh is the only "At Startup of Array" entry.
|
||||||
|
|
||||||
# 2. Scripts are silent when healthy.
|
# 2. Scripts are silent when healthy.
|
||||||
# stability_watchdog.sh runs 288 times per day. It produces zero output on clean
|
# stability_watchdog.sh runs 288 times per day. It produces zero output on clean
|
||||||
|
|||||||
@@ -404,7 +404,7 @@ zfs change-key \
|
|||||||
-o keyformat=raw \
|
-o keyformat=raw \
|
||||||
poolname/Gmer4Lfe-Personal
|
poolname/Gmer4Lfe-Personal
|
||||||
|
|
||||||
# Add to array_start.sh or ramdisk_setup.sh:
|
# Add to array_started.sh or ramdisk_setup.sh:
|
||||||
zfs load-key poolname/Gmer4Lfe-Personal
|
zfs load-key poolname/Gmer4Lfe-Personal
|
||||||
zfs mount poolname/Gmer4Lfe-Personal
|
zfs mount poolname/Gmer4Lfe-Personal
|
||||||
|
|
||||||
@@ -432,14 +432,15 @@ Individual scripts are never scheduled directly except the 30-minute Emby sync.
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
bash /mnt/user/appdata/unraid_scripts/Orchestrators/array_start.sh
|
bash /mnt/user/appdata/unraid_scripts/Orchestrators/array_started.sh
|
||||||
# Schedule: At Startup of Array
|
# Schedule: At Startup of Array
|
||||||
# Run as: Background Task
|
# Run as: Background Task
|
||||||
```
|
```
|
||||||
|
|
||||||
This single entry launches everything defined in ARRAY_START_SCRIPTS from master.conf:
|
This single entry launches everything defined in ARRAY_START_SCRIPTS from master.conf:
|
||||||
inotify_tuning, docker_syslog_filter, php_fpm_max_children, ramdisk_setup,
|
inotify_tuning, docker_syslog_filter, php_fpm_max_children, ramdisk_setup,
|
||||||
docker_network_connect, stability_watchdog, docker_watchdog, failover.
|
docker_network_connect, fallback.
|
||||||
|
Watchdogs (resource, docker, system, stability) run separately via watchdog_orchestrator.
|
||||||
|
|
||||||
### Cron Schedule
|
### Cron Schedule
|
||||||
|
|
||||||
|
|||||||
@@ -179,7 +179,7 @@ ls /mnt/ramdisk_transcodes/
|
|||||||
### Usage
|
### Usage
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ramdisk_setup.sh # normal run (called by array_start.sh)
|
ramdisk_setup.sh # normal run (called by array_started.sh)
|
||||||
ramdisk_setup.sh --dry-run # show what would be created without creating
|
ramdisk_setup.sh --dry-run # show what would be created without creating
|
||||||
ramdisk_setup.sh --status # show current ramdisk, symlink, and SSD state
|
ramdisk_setup.sh --status # show current ramdisk, symlink, and SSD state
|
||||||
ramdisk_setup.sh --log # verbose — show each creation step
|
ramdisk_setup.sh --log # verbose — show each creation step
|
||||||
@@ -372,7 +372,7 @@ TRANSCODE_SERVERS=(
|
|||||||
## Schedule
|
## Schedule
|
||||||
|
|
||||||
```
|
```
|
||||||
At Startup of Array (via array_start.sh in unRAID_Essentials/):
|
At Startup of Array (via array_started.sh in unRAID_Essentials/):
|
||||||
ramdisk_setup.sh — creates ramdisk, symlink, transcoding-temp
|
ramdisk_setup.sh — creates ramdisk, symlink, transcoding-temp
|
||||||
Must run BEFORE Emby starts
|
Must run BEFORE Emby starts
|
||||||
|
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ path is a symlink whose target is managed at runtime. Sessions in progress never
|
|||||||
|
|
||||||
```
|
```
|
||||||
unRAID_Essentials/
|
unRAID_Essentials/
|
||||||
array_start.sh ──────────────────────────────► ramdisk_setup.sh (at array start)
|
array_started.sh ──────────────────────────────► ramdisk_setup.sh (at array start)
|
||||||
|
|
||||||
Orchestrators/
|
Orchestrators/
|
||||||
transcode_management.sh ──── cleanup first ──► transcode_cleanup.sh
|
transcode_management.sh ──── cleanup first ──► transcode_cleanup.sh
|
||||||
@@ -97,7 +97,7 @@ Both are called by `transcode_management.sh` in the correct order.
|
|||||||
|
|
||||||
| Script | Role | When It Runs |
|
| Script | Role | When It Runs |
|
||||||
|--------|------|-------------|
|
|--------|------|-------------|
|
||||||
| `ramdisk_setup.sh` | Create tmpfs, SSD fallback dir, symlink, transcoding-temp | At array start (via array_start.sh) |
|
| `ramdisk_setup.sh` | Create tmpfs, SSD fallback dir, symlink, transcoding-temp | At array start (via array_started.sh) |
|
||||||
| `transcode_cleanup.sh` | Remove stale files, check for flip-back opportunity | Every 3 min via transcode_management.sh — runs first |
|
| `transcode_cleanup.sh` | Remove stale files, check for flip-back opportunity | Every 3 min via transcode_management.sh — runs first |
|
||||||
| `transcode_manager.sh` | Check usage, flip symlink, safety checks, session display, daily log | Every 3 min via transcode_management.sh — runs second |
|
| `transcode_manager.sh` | Check usage, flip symlink, safety checks, session display, daily log | Every 3 min via transcode_management.sh — runs second |
|
||||||
|
|
||||||
|
|||||||
@@ -414,7 +414,12 @@ user_scripts_stop.sh --dry-run # show what would be stopped
|
|||||||
|
|
||||||
6. /etc/rc.d/rc.libvirt stop (VM Manager)
|
6. /etc/rc.d/rc.libvirt stop (VM Manager)
|
||||||
|
|
||||||
7. /etc/rc.d/rc.docker stop (all containers stop)
|
7. Orchestrators/array_stopping.sh — safe ordered array stop:
|
||||||
|
- user_scripts_stop.sh stop background User Scripts
|
||||||
|
- fallback.sh --stop graceful fallback teardown
|
||||||
|
- rsync_stop.sh --rsync-only kill active rsync transfers
|
||||||
|
- mover_stop.sh stop mover
|
||||||
|
- docker_container_stop.sh stop all containers gracefully
|
||||||
|
|
||||||
8. sync (flush filesystem buffers to disk)
|
8. sync (flush filesystem buffers to disk)
|
||||||
|
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ Graceful operations mover_stop.sh — clean mover stop
|
|||||||
|
|
||||||
```
|
```
|
||||||
Orchestrators/
|
Orchestrators/
|
||||||
array_start.sh ─────────────────────────► inotify_tuning.sh (first in sequence)
|
array_started.sh ─────────────────────────► inotify_tuning.sh (first in sequence)
|
||||||
─────────────────────────► docker_syslog_filter.sh (second)
|
─────────────────────────► docker_syslog_filter.sh (second)
|
||||||
─────────────────────────► php_fpm_max_children.sh
|
─────────────────────────► php_fpm_max_children.sh
|
||||||
weekly_maintenance.sh ──────────────────► clear_logs.sh
|
weekly_maintenance.sh ──────────────────► clear_logs.sh
|
||||||
|
|||||||
Reference in New Issue
Block a user