mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-20 21:48:47 +02:00
acces distant : le tunnel jean-link tourne aussi hors systemd (macOS/Windows)
linkServiceCtl/linkServiceActive etaient Linux-only : sur un Mac le token etait bien enregistre mais rien ne composait jamais le tunnel, d'ou le message << service arrete >> permanent. Hors Linux on lance desormais 'jean link serve' en processus detache suivi par un fichier PID (spawnDetached/pidAlive/killTree, nouvelles primitives par plateforme). - le mode app relance le tunnel au demarrage si une cle est enregistree - nouvelle route POST /api/link/start + bouton << demarrer le tunnel >> dans le panneau, visible quand le lien est configure mais arrete
This commit is contained in:
1 parent
9787923879
commit
075a05ebaa
9 files changed
+214
-7
No files matched your search
@@ -13,6 +13,7 @@ import (
|
||||
"strconv"
|
||||
"strings"
|
||||
"syscall"
|
||||
"time"
|
||||
)
|
||||
|
||||
// defaultJeanHome is the data root when neither $JEAN_HOME nor /etc/default/jean
|
||||
@@ -295,3 +296,39 @@ func ramUsageMB() (used, total int) {
|
||||
}
|
||||
return (totalKB - availKB) / 1024, totalKB / 1024
|
||||
}
|
||||
|
||||
// --- Supervision de processus détachés (worker de lien, service en mode
|
||||
// utilisateur). Pendant Unix de sys_platform_windows.go.
|
||||
|
||||
// spawnDetached prépare une commande qui survivra à la mort de Jean : Setsid la
|
||||
// place dans une nouvelle session, donc elle n'est pas tuée avec notre groupe.
|
||||
func spawnDetached(name string, args ...string) *exec.Cmd {
|
||||
cmd := exec.Command(name, args...)
|
||||
cmd.SysProcAttr = &syscall.SysProcAttr{Setsid: true}
|
||||
return cmd
|
||||
}
|
||||
|
||||
// pidAlive : le signal 0 ne tue rien, il teste juste l'existence du process.
|
||||
func pidAlive(pid int) bool {
|
||||
if pid <= 0 {
|
||||
return false
|
||||
}
|
||||
return syscall.Kill(pid, 0) == nil
|
||||
}
|
||||
|
||||
// killTree arrête le process ET ses enfants. Setsid ayant fait de lui un chef de
|
||||
// groupe, un PID négatif vise le groupe entier ; SIGKILL en dernier recours.
|
||||
func killTree(pid int) {
|
||||
if pid <= 0 {
|
||||
return
|
||||
}
|
||||
if err := syscall.Kill(-pid, syscall.SIGTERM); err != nil {
|
||||
_ = syscall.Kill(pid, syscall.SIGTERM)
|
||||
}
|
||||
for i := 0; i < 30 && pidAlive(pid); i++ {
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
}
|
||||
if pidAlive(pid) {
|
||||
_ = syscall.Kill(-pid, syscall.SIGKILL)
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user