service/example/runner: append envs.

This commit is contained in:
Daniel Theophanes
2015-03-29 00:11:40 -07:00
parent 842e0b7dbc
commit 09da6fcd5a
+13 -8
View File
@@ -36,6 +36,8 @@ type program struct {
service service.Service service service.Service
*Config *Config
cmd *exec.Cmd
} }
func (p *program) Start(s service.Service) error { func (p *program) Start(s service.Service) error {
@@ -46,14 +48,14 @@ func (p *program) Start(s service.Service) error {
return fmt.Errorf("Failed to find executable %q: %v", p.Exec, err) return fmt.Errorf("Failed to find executable %q: %v", p.Exec, err)
} }
cmd := exec.Command(fullExec, p.Args...) p.cmd = exec.Command(fullExec, p.Args...)
cmd.Dir = p.Dir p.cmd.Dir = p.Dir
cmd.Env = p.Env p.cmd.Env = append(os.Environ(), p.Env...)
go p.run(cmd) go p.run()
return nil return nil
} }
func (p *program) run(cmd *exec.Cmd) { func (p *program) run() {
logger.Info("Starting ", p.DisplayName) logger.Info("Starting ", p.DisplayName)
defer func() { defer func() {
if service.Interactive() { if service.Interactive() {
@@ -70,7 +72,7 @@ func (p *program) run(cmd *exec.Cmd) {
return return
} }
defer f.Close() defer f.Close()
cmd.Stderr = f p.cmd.Stderr = f
} }
if p.Stdout != "" { if p.Stdout != "" {
f, err := os.OpenFile(p.Stdout, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0777) f, err := os.OpenFile(p.Stdout, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0777)
@@ -79,10 +81,10 @@ func (p *program) run(cmd *exec.Cmd) {
return return
} }
defer f.Close() defer f.Close()
cmd.Stdout = f p.cmd.Stdout = f
} }
err := cmd.Run() err := p.cmd.Run()
if err != nil { if err != nil {
logger.Warningf("Error running: %v", err) logger.Warningf("Error running: %v", err)
} }
@@ -92,6 +94,9 @@ func (p *program) run(cmd *exec.Cmd) {
func (p *program) Stop(s service.Service) error { func (p *program) Stop(s service.Service) error {
close(p.exit) close(p.exit)
logger.Info("Stopping ", p.DisplayName) logger.Info("Stopping ", p.DisplayName)
if p.cmd.ProcessState.Exited() == false {
p.cmd.Process.Kill()
}
if service.Interactive() { if service.Interactive() {
os.Exit(0) os.Exit(0)
} }