service/example/runner: append envs.
This commit is contained in:
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user