Backend als Windows-Dienst registrierbar (SCM, wie Mail-Client)
Das Backend kann jetzt — analog zum Mail-Client — als Windows-Dienst laufen. - main() refaktoriert: App-Logik in run_app(shutdown, service_mode); eigene tokio-Runtime statt #[tokio::main]. Windows startet zuerst den SCM-Dispatcher, fällt bei interaktivem Start auf Konsolenmodus zurück (--console erzwingt ihn). - src/service.rs (windows-only): SCM-Integration via windows-service-Crate, Stop/Shutdown-Handler, Running/Stopped-Status. Setzt das Arbeitsverzeichnis aufs EXE-Verzeichnis (Dienst startet sonst in System32), damit config.toml/ data/logs daneben liegen. Fallback-Log bei Boot-Fehler. - Graceful Shutdown: GSD-Lizenz-Freigabe in den Serve-Wrapper gezogen (greift in beiden Modi); Stop-Trigger ist das übergebene shutdown-Future. - Logging: Konsolenmodus → stderr (wie bisher); Dienst-Modus → rollende Tagesdatei (tracing-appender) unter [logging] dir (Default logs/). - install-service.ps1 / uninstall-service.ps1 (Dienst "Holzleitner Backend"). - README: Windows-Dienst-Abschnitt; .gitignore: /logs + Fatal-Log. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
35
README.md
35
README.md
@ -112,3 +112,38 @@ touch migrations/0002_tour.sql
|
||||
`tracing` + `tracing-subscriber` mit `EnvFilter`. Der Default-Filter steht
|
||||
in `config.toml` unter `[logging] filter`; die Env-Variable `RUST_LOG` hat
|
||||
Vorrang (Ad-hoc-Debugging ohne Datei-Edit, z. B. `RUST_LOG=debug cargo run`).
|
||||
|
||||
Im **Konsolenmodus** geht alles auf `stderr`. Im **Windows-Dienst-Modus**
|
||||
(keine Konsole) wird stattdessen in rollende Tages-Logdateien unter
|
||||
`[logging] dir` (Default `logs/`, relativ zur EXE) geschrieben.
|
||||
|
||||
## Windows-Dienst
|
||||
|
||||
Das Backend kann als Windows-Dienst laufen (gleiches Muster wie der
|
||||
Mail-Client). Beim Start versucht die EXE zuerst, sich beim Service Control
|
||||
Manager zu registrieren; gelingt das nicht (interaktiver Start), fällt sie in
|
||||
den Konsolenmodus zurück. `--console` (bzw. `-c`) erzwingt den Konsolenmodus.
|
||||
|
||||
Der Dienst setzt sein Arbeitsverzeichnis auf das EXE-Verzeichnis — `config.toml`,
|
||||
`data/` und `logs/` müssen also **neben der EXE** liegen.
|
||||
|
||||
```powershell
|
||||
# 1) Release-Build (auf dem Zielsystem oder per Cross-Build)
|
||||
cargo build --release -p holzleitner-api
|
||||
|
||||
# 2) target\release\holzleitner-server.exe + config.toml + die *.ps1-Skripte
|
||||
# in ein Installationsverzeichnis kopieren, z. B. C:\HolzleitnerBackend\
|
||||
|
||||
# 3) Als Administrator registrieren (Dienst "Holzleitner Backend")
|
||||
.\install-service.ps1
|
||||
# Optional mit Dienstkonto (DB-/Netzwerkzugriff):
|
||||
.\install-service.ps1 -Credential (Get-Credential)
|
||||
|
||||
# Entfernen
|
||||
.\uninstall-service.ps1
|
||||
```
|
||||
|
||||
Der Dienst startet verzögert-automatisch (nach den System-/DB-Diensten) und
|
||||
wird bei Absturz 3× im Abstand von 60 s neu gestartet. Interner Dienst-Name:
|
||||
`HolzleitnerBackend`. Boot-Fehler **vor** der Logger-Initialisierung (z. B.
|
||||
fehlende `config.toml`) landen in `holzleitner-backend-fatal.log` neben der EXE.
|
||||
|
||||
Reference in New Issue
Block a user