fahrenheit/pihole-FTL: silent dashboard outage when restart hits port-bind conflict — needs watchdog #2
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What happened
2026-04-29 ~04:25 UTC: Pi-hole admin UI was unreachable. DNS still working. No alerts had fired.
Root cause
pihole-FTLrunning since 2026-04-23 picked up a respawn-cycle on 2026-04-24 09:28 UTC. At rebind time, ports 80/443 were briefly held by something else (likely the previous FTL instance — see the sibling bug on supervise-daemon orphan reaping). civetweb logged:The
o/osmodifiers inwebserver.port = "80o,443os,[::]:80o,[::]:443os"mean optional bind — civetweb logs and gives up. There is no retry. FTL kept running in DNS-only mode for ~5 days before anyone noticed.The failure is also invisible from a casual look:
/var/log/pihole/FTL.loghas no mention of it.pihole statusshows ✓ for FTL listening on 53.webserver.logis the only place it surfaces, and that file isn't on any monitoring path.Suggested watchdog
Minimal cron on hertz (or inside the container) that pokes the embedded server and bounces FTL on failure:
Alternatively, fold into
health-check.shon hertz alongside the existing container/cert/disk/thermal/battery checks — it's the same shape of "poke endpoint, alert/repair on failure".Lesser fix (config-only)
Drop the
o/osmodifiers fromwebserver.portso a bind failure is loud (civetweb refuses to start, supervise-daemon respawns). Risk: if the conflict is transient and self-healing, FTL would respawn-loop. The watchdog is more robust.Cleanup that worked
kill -9 <orphan-pid>(SIGTERM was ignored — see sibling bug)rc-service pihole-FTL restart(to make the new instance retry the now-free 80/443)/admin/returns 302.Evidence trail
webserver.log.12026-04-24 09:28:21.880 UTC: bind errorsFTL.log2026-04-23 .. 2026-04-29: no web-related entriesss -tlnpmid-incident: onlypihole-FTLon 53, nothing on 80/443Shipped the lesser fix in v0.1.9. fahrenheit
pihole.tomlupdated live:pihole-FTL --config webserver.port "80,443s,[::]:80,[::]:443s"(verified — running instance keeps old config in memory until next FTL restart, change takes effect then). Next time a port collision happens, civetweb will refuse to start and supervise-daemon respawns instead of giving up silently. Watchdog cron rejected as unneeded with the loud-fail config; the runbook ("fahrenheit / pihole-FTL gotchas" subsection in v0.1.9) documents the gotcha so it does not drift back. Closing.