자식 프로세스 비정상종료시 처리

This commit is contained in:
2023-06-15 11:24:02 +09:00
parent a8548fffe2
commit 3f2ea5cee3
3 changed files with 21 additions and 4 deletions

View File

@ -272,8 +272,17 @@ func NewClient() (HoustonClient, error) {
case exited := <-exitChan: case exited := <-exitChan:
var newprocs []*procmeta var newprocs []*procmeta
for _, proc := range hc.childProcs { for _, proc := range hc.childProcs {
if proc.cmd == exited && proc.state != protos.ProcessState_Stopped { if proc.cmd == exited {
proc.state = protos.ProcessState_Stopped 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 { } else {
newprocs = append(newprocs, proc) newprocs = append(newprocs, proc)
} }
@ -383,6 +392,7 @@ func (hc *houstonClient) Start() {
for _, proc := range hc.childProcs { for _, proc := range hc.childProcs {
proc.cmd.Wait() proc.cmd.Wait()
proc.cmd.Process.Release()
} }
}() }()

View File

@ -277,9 +277,10 @@ func (hc *houstonClient) launch(meta *procmeta) error {
return return
} }
logfile.Write(bt.buf[:bt.size]) logfile.Write(bt.buf[:bt.size])
logfile.Sync()
meta.buffers.push(bt.buf) meta.buffers.push(bt.buf)
thisFileSize += bt.size thisFileSize += bt.size
if thisFileSize > 1024*1024 { if thisFileSize > 10*1024*1024 {
switchToNextFile() switchToNextFile()
} }
} }
@ -414,9 +415,9 @@ func (hc *houstonClient) stopChildProcess(req *shared.StopProcessRequest, op pro
if len(killing) > 0 { if len(killing) > 0 {
for _, proc := range killing { for _, proc := range killing {
proc.state = protos.ProcessState_Stopping
if err := proc.cmd.Process.Signal(syscall.SIGTERM); err != nil { if err := proc.cmd.Process.Signal(syscall.SIGTERM); err != nil {
proc.cmd.Process.Signal(os.Kill) 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 { for _, proc := range killing {
proc.cmd.Wait() proc.cmd.Wait()
proc.cmd.Process.Release()
} }
hc.childProcs = remains hc.childProcs = remains
@ -473,6 +475,7 @@ func (hc *houstonClient) restartChildProcess(req *shared.RestartProcessRequest,
for _, proc := range restarts { for _, proc := range restarts {
proc.cmd.Wait() proc.cmd.Wait()
proc.cmd.Process.Release()
proc.state = protos.ProcessState_Stopped proc.state = protos.ProcessState_Stopped
} }
op.Refresh(context.Background(), hc.makeOperationQueryRequest()) op.Refresh(context.Background(), hc.makeOperationQueryRequest())

4
houston.sh Normal file
View File

@ -0,0 +1,4 @@
#!/bin/sh
nohup /home/opdev/houston -client -logfile &