diff --git a/client/client.go b/client/client.go index 367beb2..1cb475d 100644 --- a/client/client.go +++ b/client/client.go @@ -272,8 +272,17 @@ func NewClient() (HoustonClient, error) { case exited := <-exitChan: var newprocs []*procmeta for _, proc := range hc.childProcs { - if proc.cmd == exited && proc.state != protos.ProcessState_Stopped { - proc.state = protos.ProcessState_Stopped + if proc.cmd == exited { + if proc.state == protos.ProcessState_Running { + go func(cmd *exec.Cmd) { + if err := cmd.Process.Signal(syscall.SIGTERM); err != nil { + cmd.Process.Signal(os.Kill) + } + cmd.Wait() + cmd.Process.Release() + logger.Println("abnormal termination of process :", cmd.Args) + }(proc.cmd) + } } else { newprocs = append(newprocs, proc) } @@ -383,6 +392,7 @@ func (hc *houstonClient) Start() { for _, proc := range hc.childProcs { proc.cmd.Wait() + proc.cmd.Process.Release() } }() diff --git a/client/operation.go b/client/operation.go index 63bc4cf..30c0ff2 100644 --- a/client/operation.go +++ b/client/operation.go @@ -277,9 +277,10 @@ func (hc *houstonClient) launch(meta *procmeta) error { return } logfile.Write(bt.buf[:bt.size]) + logfile.Sync() meta.buffers.push(bt.buf) thisFileSize += bt.size - if thisFileSize > 1024*1024 { + if thisFileSize > 10*1024*1024 { switchToNextFile() } } @@ -414,9 +415,9 @@ func (hc *houstonClient) stopChildProcess(req *shared.StopProcessRequest, op pro if len(killing) > 0 { for _, proc := range killing { + proc.state = protos.ProcessState_Stopping if err := proc.cmd.Process.Signal(syscall.SIGTERM); err != nil { proc.cmd.Process.Signal(os.Kill) - proc.state = protos.ProcessState_Stopping } } @@ -424,6 +425,7 @@ func (hc *houstonClient) stopChildProcess(req *shared.StopProcessRequest, op pro for _, proc := range killing { proc.cmd.Wait() + proc.cmd.Process.Release() } hc.childProcs = remains @@ -473,6 +475,7 @@ func (hc *houstonClient) restartChildProcess(req *shared.RestartProcessRequest, for _, proc := range restarts { proc.cmd.Wait() + proc.cmd.Process.Release() proc.state = protos.ProcessState_Stopped } op.Refresh(context.Background(), hc.makeOperationQueryRequest()) diff --git a/houston.sh b/houston.sh new file mode 100644 index 0000000..e61d244 --- /dev/null +++ b/houston.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +nohup /home/opdev/houston -client -logfile & +