From 95ae97eb7eaa268a06bc2b90184eaed6342b3142 Mon Sep 17 00:00:00 2001 From: Mikhail Osipov Date: Thu, 17 Dec 2020 23:27:09 +0300 Subject: add cmd.env special variable --- cmd/tunneld/main.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'cmd') diff --git a/cmd/tunneld/main.go b/cmd/tunneld/main.go index 71af6d4..8ae1e4e 100644 --- a/cmd/tunneld/main.go +++ b/cmd/tunneld/main.go @@ -15,6 +15,7 @@ import ( "path" "strconv" "strings" + "sync" "syscall" "tunnel/pkg/config" "tunnel/pkg/server" @@ -234,9 +235,13 @@ func runCommand(s *server.Server, name string) error { log.Printf("cmd \"%s\" try", cmd) - args := strings.Split(cmd, " ") + args := strings.Fields(cmd) c := exec.Command(args[0], args[1:]...) + if env := s.Env().Value("cmd.env"); env != "" { + c.Env = append(os.Environ(), strings.Split(env, ",")...) + } + stdout, _ := c.StdoutPipe() stderr, _ := c.StderrPipe() @@ -244,12 +249,17 @@ func runCommand(s *server.Server, name string) error { return fmt.Errorf("cmd \"%s\" start failed: %w", cmd, err) } + var wg sync.WaitGroup + logger := func(s string, r io.Reader) { for scanner := bufio.NewScanner(r); scanner.Scan(); { log.Println(s, ">", scanner.Text()) } + wg.Done() } + wg.Add(2) + go logger(args[0], stdout) go logger(args[0], stderr) @@ -257,6 +267,8 @@ func runCommand(s *server.Server, name string) error { return fmt.Errorf("cmd \"%s\" failed: %w", cmd, err) } + wg.Wait() + log.Printf("cmd \"%s\" ok", cmd) return nil -- cgit v1.2.3-70-g09d2