From 3f2ea5cee3920ed23cd6e7c8c9d47a49820f6a47 Mon Sep 17 00:00:00 2001 From: mountain Date: Thu, 15 Jun 2023 11:24:02 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9E=90=EC=8B=9D=20=ED=94=84=EB=A1=9C?= =?UTF-8?q?=EC=84=B8=EC=8A=A4=20=EB=B9=84=EC=A0=95=EC=83=81=EC=A2=85?= =?UTF-8?q?=EB=A3=8C=EC=8B=9C=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/client.go | 14 ++++++++++++-- client/operation.go | 7 +++++-- houston.sh | 4 ++++ 3 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 houston.sh 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 & +