| 21 | } |
| 22 | |
| 23 | func (p *Program) Start(s service.Service) error { |
| 24 | // Look for exec. |
| 25 | // Verify home directory. |
| 26 | fullExec, err := exec.LookPath(p.cfg.Exec) |
| 27 | if err != nil { |
| 28 | return errors.Trace(err) |
| 29 | } |
| 30 | |
| 31 | if runtime.GOOS == "windows" && strings.Contains(fullExec, ".py") { |
| 32 | p.cmd = exec.Command("python", fullExec) |
| 33 | } else if runtime.GOOS == "windows" && strings.Contains(fullExec, ".js") { |
| 34 | p.cmd = exec.Command("node", fullExec) |
| 35 | } else { |
| 36 | p.cmd = exec.Command(fullExec, p.cfg.Args...) |
| 37 | p.cmd.Dir = p.cfg.Dir |
| 38 | } |
| 39 | p.cmd.Env = append(os.Environ(), p.cfg.Env...) |
| 40 | p.cmd.Stderr = p.log |
| 41 | p.cmd.Stdout = p.log |
| 42 | |
| 43 | go p.run() |
| 44 | return nil |
| 45 | } |
| 46 | func (p *Program) run() { |
| 47 | fmt.Fprintln(p.log, "Program starting", p.cfg.DisplayName) |
| 48 | defer p.Stop(p.svc) |