자식 프로세스 비정상종료시 처리
This commit is contained in:
@ -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()
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
|||||||
@ -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
4
houston.sh
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
nohup /home/opdev/houston -client -logfile &
|
||||||
|
|
||||||
Reference in New Issue
Block a user