Skip to content

Commit 3dc86b2

Browse files
authored
fix: make sure to turn down all processes on exit (#6200)
Signed-off-by: Ettore Di Giacinto <[email protected]>
1 parent 5ec724a commit 3dc86b2

File tree

7 files changed

+42
-10
lines changed

7 files changed

+42
-10
lines changed

cmd/local-ai/main.go

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ package main
22

33
import (
44
"os"
5-
"os/signal"
65
"path/filepath"
7-
"syscall"
86

97
"github.com/alecthomas/kong"
108
"github.com/joho/godotenv"
@@ -24,14 +22,6 @@ func main() {
2422
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr})
2523
zerolog.SetGlobalLevel(zerolog.InfoLevel)
2624

27-
// Catch signals from the OS requesting us to exit
28-
go func() {
29-
c := make(chan os.Signal, 1) // we need to reserve to buffer size 1, so the notifier are not blocked
30-
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
31-
<-c
32-
os.Exit(1)
33-
}()
34-
3525
// handle loading environment variabled from .env files
3626
envFiles := []string{".env", "localai.env"}
3727
homeDir, err := os.UserHomeDir()

core/cli/explorer.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"time"
66

77
cliContext "github.com/mudler/LocalAI/core/cli/context"
8+
"github.com/mudler/LocalAI/core/cli/signals"
89
"github.com/mudler/LocalAI/core/explorer"
910
"github.com/mudler/LocalAI/core/http"
1011
)
@@ -45,5 +46,7 @@ func (e *ExplorerCMD) Run(ctx *cliContext.Context) error {
4546

4647
appHTTP := http.Explorer(db)
4748

49+
signals.Handler(nil)
50+
4851
return appHTTP.Listen(e.Address)
4952
}

core/cli/federated.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55

66
cliContext "github.com/mudler/LocalAI/core/cli/context"
7+
"github.com/mudler/LocalAI/core/cli/signals"
78
"github.com/mudler/LocalAI/core/p2p"
89
)
910

@@ -19,5 +20,7 @@ func (f *FederatedCLI) Run(ctx *cliContext.Context) error {
1920

2021
fs := p2p.NewFederatedServer(f.Address, p2p.NetworkID(f.Peer2PeerNetworkID, p2p.FederatedID), f.Peer2PeerToken, !f.RandomWorker, f.TargetWorker)
2122

23+
signals.Handler(nil)
24+
2225
return fs.Start(context.Background())
2326
}

core/cli/run.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"github.com/mudler/LocalAI/core/application"
1111
cli_api "github.com/mudler/LocalAI/core/cli/api"
1212
cliContext "github.com/mudler/LocalAI/core/cli/context"
13+
"github.com/mudler/LocalAI/core/cli/signals"
1314
"github.com/mudler/LocalAI/core/config"
1415
"github.com/mudler/LocalAI/core/http"
1516
"github.com/mudler/LocalAI/core/p2p"
@@ -224,5 +225,8 @@ func (r *RunCMD) Run(ctx *cliContext.Context) error {
224225
return err
225226
}
226227

228+
// Catch signals from the OS requesting us to exit, and stop all backends
229+
signals.Handler(app.ModelLoader())
230+
227231
return appHTTP.Listen(r.Address)
228232
}

core/cli/signals/signals.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package signals
2+
3+
import (
4+
"os"
5+
"os/signal"
6+
"syscall"
7+
8+
"github.com/mudler/LocalAI/pkg/model"
9+
"github.com/rs/zerolog/log"
10+
)
11+
12+
func Handler(m *model.ModelLoader) {
13+
// Catch signals from the OS requesting us to exit, and stop all backends
14+
go func(m *model.ModelLoader) {
15+
c := make(chan os.Signal, 1) // we need to reserve to buffer size 1, so the notifier are not blocked
16+
signal.Notify(c, os.Interrupt, syscall.SIGTERM, syscall.SIGINT)
17+
<-c
18+
if m != nil {
19+
if err := m.StopAllGRPC(); err != nil {
20+
log.Error().Err(err).Msg("error while stopping all grpc backends")
21+
}
22+
}
23+
os.Exit(1)
24+
}(m)
25+
}

core/cli/worker/worker_llamacpp.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"syscall"
1010

1111
cliContext "github.com/mudler/LocalAI/core/cli/context"
12+
"github.com/mudler/LocalAI/core/cli/signals"
1213
"github.com/mudler/LocalAI/core/gallery"
1314
"github.com/mudler/LocalAI/pkg/system"
1415
"github.com/rs/zerolog/log"
@@ -69,6 +70,9 @@ func (r *LLamaCPP) Run(ctx *cliContext.Context) error {
6970
args := strings.Split(r.ExtraLLamaCPPArgs, " ")
7071

7172
args = append([]string{grpcProcess}, args...)
73+
74+
signals.Handler(nil)
75+
7276
return syscall.Exec(
7377
grpcProcess,
7478
args,

core/cli/worker/worker_p2p.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"time"
1010

1111
cliContext "github.com/mudler/LocalAI/core/cli/context"
12+
"github.com/mudler/LocalAI/core/cli/signals"
1213
"github.com/mudler/LocalAI/core/p2p"
1314
"github.com/mudler/LocalAI/pkg/system"
1415
"github.com/phayes/freeport"
@@ -106,6 +107,8 @@ func (r *P2P) Run(ctx *cliContext.Context) error {
106107
}
107108
}
108109

110+
signals.Handler(nil)
111+
109112
for {
110113
time.Sleep(1 * time.Second)
111114
}

0 commit comments

Comments
 (0)