mirror of
https://github.com/datarhei/core.git
synced 2025-10-06 00:17:07 +08:00
Call onExit if cmd.Start() fails
This commit is contained in:
@@ -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 {
|
||||
|
Reference in New Issue
Block a user