summaryrefslogtreecommitdiff
path: root/cmd/tunneld
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/tunneld')
-rw-r--r--cmd/tunneld/main.go14
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