Commit graph

8 commits

Author SHA1 Message Date
Niko Marmeladkov
27c3d339c6
add --state-dir (-D) flag to persist enabled/logs/pid across reboots
socket stays in /tmp/rss/rss.sock so client commands need no extra args;
state dir is controlled by RSS_STATE_DIR or --state-dir and stores
enabled flags, logs, and daemon.pid in a persistent location.
2026-07-05 22:31:48 +03:00
Niko Marmeladkov
a4ae0b21db rss attach: send commands to service stdin
- rss send <name> <message>: one-line command to service stdin
- rss attach <name>: interactive stdin forwarding with log tailing
- rss attach --full <name>: same but Ctrl+C sends SIGINT
- safe mode: Ctrl+C just detaches, doesn't kill the process
- Ctrl+P then D to detach
- daemon stores ChildStdin in Proc, handles streaming stdin IPC
2026-07-03 17:32:09 +03:00
Niko Marmeladkov
672b676020 multi-service commands: rss start/stop/restart/enable/disable mc-proxy mc-lobby
supports space-separated service names in start, stop, restart,
enable, disable commands. each service result returned on its own line.
2026-07-03 15:33:01 +03:00
Niko Marmeladkov
541e3b09ed
enable/disable via daemon IPC, not local config
CLI now sends enable/disable commands to the daemon via Unix
socket. The daemon validates the service against its config,
creates/removes the enabled marker, and optionally starts the
service (enable --now). CLI no longer needs config access.
2026-07-03 13:27:40 +03:00
Niko Marmeladkov
7383445ea5
refactor paths: remove HOME dependency, use env/XDG/tmp fallback
- socket/log/enabled paths resolved via state.rs with priority:
  RSS_SOCKET/RSS_STATE_DIR/RSS_CONFIG_DIR env → XDG_RUNTIME_DIR
  → ~/.local/share/rss → /tmp/rss-niko
- config path: RSS_CONFIG → RSS_CONFIG_DIR/config.toml → ~/.config/rss
  → /etc/rss/config.toml
- removed State struct; all functions are module-level
- daemon chmods socket parent dir for group access
- clean up stale PID file on config load failure
2026-07-03 13:04:58 +03:00
Niko Marmeladkov
b069c527bd
daemon: centralized architecture with Unix socket IPC
- single daemon process manages all services in memory
- CLI communicates via Unix socket, does not read config
- config hot-reload: daemon polls config.toml, reacts immediately
- rename-safe: removing a service from config kills it, adding starts if enabled
- logs remain file-based for direct reading by rss logs
- removed per-service PID files, supervisor module simplified
2026-07-03 11:49:46 +03:00
Niko Marmeladkov
a7ce8405d1
centralize: daemon syncs state with config, cleanup orphans
- rss daemon kills and cleans services not in config (rename-safe)
- rss list also prunes orphaned state
- rss start checks for already running before spawning
- State: add supervise_dir/service_dir/list_pid_names helpers
2026-07-03 11:20:36 +03:00
Niko Marmeladkov
653b8d1612
initial: per-user process supervisor (rss)
- start/stop/restart/status/logs/enable/disable/list/daemon
- PID-file based state, no daemon, no root
- config.toml with placeholders, restart policies, env vars
- log tailing with -n/-f and stderr colorization
- supervisor per service with SIGTERM handling
2026-07-03 10:47:25 +03:00