diff --git a/main.go b/main.go index 8421b526..8cde4a88 100644 --- a/main.go +++ b/main.go @@ -16,8 +16,11 @@ var log = mvl.Package() func main() { if len(os.Args) > 2 && os.Args[1] == "sys.daemon" { + if os.Getenv("GPTSCRIPT_DEBUG") == "true" { + mvl.SetDebug() + } if err := daemon.SysDaemon(); err != nil { - log.Fatalf("failed running daemon: %v", err) + log.Debugf("failed running daemon: %v", err) } os.Exit(0) } diff --git a/pkg/engine/daemon.go b/pkg/engine/daemon.go index 52ee4edf..c4b68559 100644 --- a/pkg/engine/daemon.go +++ b/pkg/engine/daemon.go @@ -138,6 +138,11 @@ func (e *Engine) startDaemon(_ context.Context, tool types.Tool) (string, error) cmd.Stdin = r cmd.Stderr = os.Stderr cmd.Stdout = os.Stdout + cmd.Cancel = func() error { + _ = r.Close() + return w.Close() + } + log.Infof("launched [%s][%s] port [%d] %v", tool.Parameters.Name, tool.ID, port, cmd.Args) if err := cmd.Start(); err != nil { stop() @@ -152,6 +157,7 @@ func (e *Engine) startDaemon(_ context.Context, tool types.Tool) (string, error) killedCtx, cancel := context.WithCancelCause(ctx) defer cancel(nil) + e.Ports.daemonWG.Add(1) go func() { err := cmd.Wait() if err != nil { @@ -166,15 +172,8 @@ func (e *Engine) startDaemon(_ context.Context, tool types.Tool) (string, error) defer e.Ports.daemonLock.Unlock() delete(e.Ports.daemonPorts, tool.ID) - }() - - e.Ports.daemonWG.Add(1) - context.AfterFunc(ctx, func() { - if err := cmd.Process.Kill(); err != nil { - log.Debugf("daemon failed to kill tool [%s] process: %v", tool.Parameters.Name, err) - } e.Ports.daemonWG.Done() - }) + }() for i := 0; i < 120; i++ { resp, err := http.Get(url)