diff options
| author | Mikhail Osipov <mike.osipov@gmail.com> | 2020-12-17 23:27:09 +0300 |
|---|---|---|
| committer | Mikhail Osipov <mike.osipov@gmail.com> | 2020-12-17 23:27:09 +0300 |
| commit | 95ae97eb7eaa268a06bc2b90184eaed6342b3142 (patch) | |
| tree | 0ce90378b3c6c09dc51778f798e632148c3d65cc /cmd/tunneld/main.go | |
| parent | 42a4681b424c7e2ea4312d0e405c5a4c50dd22d0 (diff) | |
add cmd.env special variable
Diffstat (limited to 'cmd/tunneld/main.go')
| -rw-r--r-- | cmd/tunneld/main.go | 14 |
1 files changed, 13 insertions, 1 deletions
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 |
