diff --git a/main.go b/main.go index 2774ae5..84ac588 100644 --- a/main.go +++ b/main.go @@ -17,6 +17,8 @@ var ( services = make(map[string]Service) controlSocket = "/adm/headless9/ctl/headless9.ctl" logPath = "/adm/headless9/log/" + execWait = false + headless9Start = time.Now() ) func main() { @@ -133,6 +135,7 @@ func headlessControls() { } func processCommand(cmd string) error { + defer PanicSafe() parts := strings.Split(cmd, " ") verb := parts[0] svc := parts[1] @@ -169,17 +172,24 @@ func processCommand(cmd string) error { log.Printf(DAEMON_SVC_MISSING, svcArgs[0]) messages++ + execWait = true go execCommand(svcArgs[0], svcArgs[1:]...) } } + for execWait { + time.Sleep(5 * time.Millisecond) + } ctlOut := "" if verb == "status" { - ctlOut = strings.Join(sysTail(10, fmt.Sprintf("%+v/%+v.log", logPath, svc)), "\n") + ctlOut += fmt.Sprintf("%+v up %+v PID %+v\n", svc, time.Since(services[svc].StartTime), services[svc].ProcessHandle.Pid) + ctlOut += strings.Join(sysTail(5, fmt.Sprintf("%+v/%+v.log", logPath, svc)), "\n") } else { - ctlOut = strings.Join(sysTail(messages, fmt.Sprintf("%+v/%+v.log", logPath, "headless9")), "\n") + + ctlOut += fmt.Sprintf("%+v up %+v\n", "headless9", time.Since(headless9Start)) + ctlOut += strings.Join(sysTail(messages, fmt.Sprintf("%+v/%+v.log", logPath, "headless9")), "\n") } f := getCtl() - _, err := fmt.Fprintf(f, "%+v", ctlOut) + _, err := fmt.Fprintf(f, "%s", ctlOut) if err != nil { log.Printf(CTL_UNABLE_WRITE, controlSocket) } @@ -222,6 +232,7 @@ func execCommand(cmd string, arg ...string) { StartupArgs: arg, StartTime: time.Now(), } + execWait = false proc.Wait() }