Technical FAQ
Super vs Systemd?
Q: Why use Super when Systemd exists?
A: Systemd is a System-level init system. Super is an Application-level supervisor.
- Use Systemd to boot the OS and start the Super daemon.
- Use Super to manage your application stack (API, Worker, DB).
- Why?
- Docker: Systemd is heavy/impossible to run inside containers. Super is native to Docker.
- Unified API: Systemd varies by Linux distro. Super provides a consistent JSON API across Ubuntu, Alpine, macOS, and Dev containers.
- App-Aware: Systemd doesn’t understand “Health Checks” via HTTP or “Atomic Binary Swaps”.
Zombie Processes
Q: How does Super handle Zombies?
A: Super does not act as a global zombie reaper. Managed apps must follow the Managed Program Requirements: run in the foreground, do not escape the process group, and rely on the host init (systemd, Tini) for PID 1 duties.
In short, Super tracks direct children with child.wait() and tears down process groups on stop; it does not reap zombies from misbehaving grandchild processes.
For deployment patterns (including tini in Docker), see Container Deployment.
Log Truncation
Q: Why are my log lines cut off?
A: To protect the daemon’s memory stability and WebSocket bandwidth, Super truncates any single log line longer than max_line_size_kb (default 16KB).
If an application goes into a loop printing 100MB lines, it would otherwise crash the supervisor (OOM). We prioritize the stability of the management plane over the completeness of a runaway log line. Raise [child_logging].max_line_size_kb if you need longer lines locally. On-disk child logs are also bounded by rotation (max_size_mb / max_backups) — see Logging — Retention and completeness.
Lost Admin Token
Q: What do I do if I lose my Admin Access Token?
A: Access tokens are shown only once when created — the plaintext sk-... secret is returned by super token create / the API and then discarded; only its SHA-256 hash is persisted in $SUPER_ROOT/data/tokens.json, so a lost secret cannot be recovered from storage. How to regain access depends on the situation:
| Situation | How to regain access |
|---|---|
auth_secret still enabled | Just sign in with auth_secret (super login <auth_secret> or the Dashboard) — it coexists with tokens. Then revoke the lost token (super token revoke <id>) and create a replacement. |
auth_secret disabled, another Admin token exists | Sign in with the remaining Admin token, revoke the lost one, create a new Admin token. |
auth_secret disabled, all Admin tokens were deleted | Automatic self-heal. superd re-enables auth_secret as soon as no Admin token records remain — ensure_auth_secret_policy runs on every login/status call, before the disabled check. Sign in with auth_secret and create a new token. |
auth_secret disabled, Admin tokens still stored but secrets forgotten | Filesystem rescue (needs write access to $SUPER_ROOT/data/, i.e. the user running superd): stop superd, then either set auth_secret_disabled to false in data/auth_settings.json (or delete that file — the default is false), or delete data/tokens.json to clear all token records, then start superd and sign in with auth_secret. |
See Authentication — Optional: disable auth_secret for the disable/recovery model.
Corrupt tokens.json
Q: superd refuses to start — “Failed to parse Access Token store …/data/tokens.json”. What now?
A: With the security plugin loaded, Access Token records live in $SUPER_ROOT/data/tokens.json (SHA-256 hashes only). If that file exists but is not valid JSON (disk full mid-write, manual edit, restore of a truncated copy, …), startup fails closed. Super does not silently replace it with [] — that would wipe every token and can re-enable bootstrap auth_secret via the “no Admin tokens left” self-heal.
Prefer: restore a good copy
- Stop
superd. - Restore
$SUPER_ROOT/data/tokens.jsonfrom your backup (same host snapshot, config management, etc.). - Ensure permissions are owner-only:
chmod 600 "$SUPER_ROOT/data/tokens.json". - Start
superdagain.
No backup: reset the store
This deletes all Access Token records. Anyone who only had an sk-… token must be issued a new one.
- Stop
superd. - Keep the bad file for forensics:
mv "$SUPER_ROOT/data/tokens.json" "$SUPER_ROOT/data/tokens.json.corrupt" - If you previously disabled
auth_secretlogin, re-enable it before starting (otherwise you may have no Bearer left after the empty store):- Edit
$SUPER_ROOT/data/auth_settings.jsonand set"auth_secret_disabled": false, or - Delete
auth_settings.json(default is enabled).
- Edit
- Confirm
[server].auth_secretis still set inconf/super.toml. - Start
superd. It creates a new emptytokens.json. - Sign in with
auth_secret(super login …or the Dashboard), then recreate Admin / Operator / Viewer tokens.
Related: Lost Admin Token · Authentication.
Was this page helpful? Thanks for your feedback!
Still have questions? Open an issue or browse the source.