Troubleshooting
Find your symptom below. Three commands answer most questions first:
runwisp validate # is the config valid?runwisp status # is the daemon up, and is it running the current config?runwisp list # which tasks exist, and when do they fire?The daemon won’t start
Section titled “The daemon won’t start”- Run
runwisp validate. It checksrunwisp.tomlexactly like startup does and reports the key, line, and column of each error. - Check the port. The default is
127.0.0.1:9477. If something holds it (often a RunWisp you forgot about),runwisp stopthe old daemon or pick another--port. - On a headless box, use
runwisp daemon. Barerunwispopens the TUI and offers to create a config.runwisp daemonexits with an error instead, which is what an init system needs.
A task never fires
Section titled “A task never fires”Check these in order:
- It has no
cron. Then it only runs when you start it.runwisp listshows the schedule RunWisp parsed. - The daemon doesn’t have your edit yet. See the next section.
- The timezone is different from what you expect. Cron uses the task’s
timezone, then[daemon] timezone, then the host’s zone. See Scheduling. - The previous run is still going. See Runs pile up.
If a manual trigger is refused, the task has
manual_trigger = false.
I edited runwisp.toml and nothing changed
Section titled “I edited runwisp.toml and nothing changed”The daemon never watches the file. Apply edits yourself:
runwisp reload # everything elserunwisp restart # [daemon] TLS, metrics, allow_station_dispatchIf the reload is rejected, nothing changed at all. The error tells you why: a config error, or a setting that needs a restart. See Reload & restart.
I’m locked out of the Web UI
Section titled “I’m locked out of the Web UI”If you didn’t set a password, the daemon generated one. Print it:
runwisp password- If
runwisp passwordrefuses, the daemon usesRUNWISP_PASSWORD. Get it from where you set it. For an installed service, that’s the drop-in fileservice installprinted (see Autostart). - If the login answers
429, you hit the rate limit. Wait a few minutes. - To set your own password, see The password. For local development only, you can turn auth off.
Logs are missing or truncated
Section titled “Logs are missing or truncated”- Old runs disappear over time: retention.
keep_runsandkeep_fordelete old runs per task;[storage] max_sizedeletes the oldest runs across all tasks. - The start or middle of a long run is gone: the run hit
log_max_size, andlog_on_fulldecided what to drop. - Output stops with
Log output stopped: disk space critically low: free disk fell belowmin_free_space.
See Run logs.
Runs pile up, or a trigger does nothing
Section titled “Runs pile up, or a trigger does nothing”on_overlap decides what happens when a run
is due while the previous one is still going:
queue(default): the new run waits. A slow task on a fast schedule builds a backlog.skip: the new run is recorded asskippedand doesn’t start. A manual trigger can look like it did nothing.kill: the running one is stopped and the new one starts.
A run that seems stuck forever may have no
timeout. See
Overlapping runs.
A service keeps restarting, or is stuck in FATAL
Section titled “A service keeps restarting, or is stuck in FATAL”A service that keeps dying at start is marked FATAL after
restart_attempts, and RunWisp
stops trying. Open its run history: each failed attempt has its exit code and
output. If a service starts fine but is counted as failed too soon, look at
healthy_after.
See When a service can’t start.
Notifications aren’t arriving
Section titled “Notifications aren’t arriving”- Is the channel routed? A
[notifiers.<id>]block alone sends nothing. Add its id to a task’snotify,global_notifiers, or a[[route]]. - Did delivery fail? A permanent failure puts a
notify.delivery_failedentry in the bell in the Web UI and TUI. - Did you reload? The daemon picks up edits to
[notify],[notifiers.*],[[route]], andtemplate_pathfiles only afterrunwisp reload.
See Notifications.
Nothing above matches
Section titled “Nothing above matches”Turn on debug logging and watch a run:
runwisp daemon --log-level debugA task that never fires and a task that fires and dies right away look very different in the daemon log.
To report a bug, attach runwisp status --json and the daemon log around the
failure to an issue.