Call onExit if cmd.Start() fails

This commit is contained in:
Ingo Oppermann
2023-04-26 22:17:08 +02:00
parent 5e2060f785
commit c9bdaae7f7

View File

@@ -527,6 +527,21 @@ func (p *process) start() error {
args = p.callbacks.onArgs(args)
}
p.cmd = exec.Command(p.binary, args...)
p.cmd.Env = []string{}
p.stdout, err = p.cmd.StderrPipe()
if err != nil {
p.setState(stateFailed)
p.parser.Parse(err.Error())
p.logger.WithError(err).Error().Log("Command failed")
p.reconnect(p.delay(stateFailed))
return err
}
if p.callbacks.onBeforeStart != nil {
if err := p.callbacks.onBeforeStart(); err != nil {
p.setState(stateFailed)
@@ -540,6 +555,22 @@ func (p *process) start() error {
}
}
if err := p.cmd.Start(); err != nil {
p.setState(stateFailed)
p.parser.Parse(err.Error())
p.logger.WithError(err).Error().Log("Command failed")
p.reconnect(p.delay(stateFailed))
p.callbacks.lock.Lock()
if p.callbacks.onExit != nil {
p.callbacks.onExit(stateFailed.String())
}
p.callbacks.lock.Unlock()
return err
}
// Start the stop timeout if enabled
if p.timeout > time.Duration(0) {
p.stopTimerLock.Lock()
@@ -557,30 +588,6 @@ func (p *process) start() error {
p.stopTimerLock.Unlock()
}
p.cmd = exec.Command(p.binary, args...)
p.cmd.Env = []string{}
p.stdout, err = p.cmd.StderrPipe()
if err != nil {
p.setState(stateFailed)
p.parser.Parse(err.Error())
p.logger.WithError(err).Error().Log("Command failed")
p.reconnect(p.delay(stateFailed))
return err
}
if err := p.cmd.Start(); err != nil {
p.setState(stateFailed)
p.parser.Parse(err.Error())
p.logger.WithError(err).Error().Log("Command failed")
p.reconnect(p.delay(stateFailed))
return err
}
p.pid = int32(p.cmd.Process.Pid)
if proc, err := psutil.NewProcess(p.pid, false); err == nil {