Hot Reload
ChannelWatch v0.9.10 can reload many runtime settings without recreating the container. The supported path is: save settings in the web UI, let the UI backend signal the core process with SIGHUP, and let the core compare the old and new /config/settings.json snapshots.
What happens on save
Section titled “What happens on save”When settings are saved through the web UI:
- The UI backend writes
/config/settings.json. - The UI backend asks supervisor for the core process ID.
- The UI backend sends
SIGHUPto the core process. - The core computes a structured diff between the previous and current settings.
- The core restarts only the affected DVR monitor tasks, unless the changed keys require a full container restart.
The core log summary starts with CONFIG_RELOADED and lists added, removed, changed, global, and restart-required settings.
Reload behavior
Section titled “Reload behavior”| Change type | v0.9.10 behavior |
|---|---|
| DVR added | New DVR monitor is initialized and started. |
| DVR removed or archived | Existing DVR monitor is stopped and watchdog state is removed. |
| DVR host, port, name, enabled state, or overrides changed | That DVR monitor is stopped, rebuilt, restarted, and freshness-checked. |
| Non-restart-required global settings changed | Active DVR monitors restart so they inherit the updated shared settings. |
| No actionable change | No monitor restart is performed. |
If a restarted DVR monitor does not publish a freshness update within the verification window, ChannelWatch logs the failure and can send a hot-reload failure notification through the configured notification manager.
Restart-required settings
Section titled “Restart-required settings”These keys are detected during hot reload, logged as restart-required, and not applied hot:
| Key | Why restart is required |
|---|---|
uvicorn_host | The UI web server bind address is chosen at process startup. |
uvicorn_port | The UI web server port is chosen at process startup. |
db_url | Database connection setup is process-level. |
rbac_enabled | Auth-layer initialization is process-level. |
multi_dvr_v2_enabled | Feature-gate changes require full runtime initialization. |
To apply one of those settings, restart the container:
docker compose downdocker compose up -dDirect file edits
Section titled “Direct file edits”The web UI is the recommended path because it validates settings and sends the reload signal. If you edit /config/settings.json directly, keep a backup and either send SIGHUP yourself or restart the container.
docker kill --signal=HUP channelwatchIf the core has not initialized any DVR monitor yet, a reload signal may not be enough to turn a fresh no-DVR startup into an active monitoring runtime. In that case, restart the container after saving the first DVR.
Notification plugins
Section titled “Notification plugins”Notification provider plugins are loaded during notification-manager initialization. Restart the container after adding or changing plugin files in /config/plugins/notifications/; this is the clearest way to ensure every DVR monitor sees the updated plugin set.
Related pages
Section titled “Related pages”- Core Settings - timezone, log level, log retention, and alert toggles
- DVR Connection - add and manage Channels DVR servers
- Environment Bootstrap Config - supported headless DVR bootstrap paths
- Provider Plugins - third-party notification providers