Supervision du moteur sans systemd (conteneur Docker)

Nouveau sys_service_container.go : supervision par fichier PID portée du mode
utilisateur macOS (Setsid, SIGTERM sur le groupe puis SIGKILL, log fichier).
sys_service_linux.go bascule automatiquement quand /run/systemd/system est
absent ou que LOKI_CONTAINER=1 ; une install systemd classique est inchangée.
Le tunnel ajean.link suit la même logique (uiServiceCtl / uiServiceActive).

Sans ce repli, changer de modèle depuis l'UI (serviceAction restart)
échouait sur un systemctl absent — le conteneur était inutilisable.

Testé sans systemd : start / status / restart / stop, PID suivi,
processus enfant arrêté avec le groupe. build linux+darwin+windows OK,
go vet + go test verts.
This commit is contained in:
Loki committed 2026-08-14 21:37:51 +00:00
1 parent de6551a153
commit 6c4a8a3cf5
10 files changed
+236 -9

No files matched your search

+4 -2
View File
@@ -322,7 +322,9 @@ func uiLogPath() string { return filepath.Join(LokiHome(), uiUnitName+".log") }
// « arrêté » sur un Mac ou un PC : le token était enregistré mais rien ne
// composait jamais le tunnel.
func uiServiceCtl(action string) error {
if runtime.GOOS != "linux" {
// Linux sans systemd (conteneur Docker) : même traitement que macOS/Windows —
// le process `loki web` possède le tunnel (appOwnsLink), sinon worker PID.
if runtime.GOOS != "linux" || !systemdAvailable() {
// Dans l'app de bureau, le tunnel tourne DANS ce process (conversation
// unique) : on ne lance surtout pas un worker séparé.
if appOwnsLink {
@@ -364,7 +366,7 @@ func uiServiceCtl(action string) error {
// uiServiceActive indique si le worker de lien tourne (unité systemd sous
// Linux, processus suivi par fichier PID ailleurs).
func uiServiceActive() bool {
if runtime.GOOS != "linux" {
if runtime.GOOS != "linux" || !systemdAvailable() {
if appOwnsLink {
return appLinkRunning()
}