func status() { if !util.FileExists(util.PidFilePath()) { fmt.Println("REX-Ray is stopped") return } pid, _ := util.ReadPidFile() fmt.Printf("REX-Ray is running at pid %d\n", pid) }
func tryToStartDaemon() { _, _, thisAbsPath := util.GetThisPathParts() fmt.Print("Starting REX-Ray...") signal := make(chan byte) client := fmt.Sprintf("%s/%s.sock", os.TempDir(), util.RandomString(32)) log.WithField("client", client).Debug("trying to start service") l, lErr := net.Listen("unix", client) failOnError(lErr) go func() { conn, acceptErr := l.Accept() if acceptErr != nil { fmt.Printf("FAILED!\n %v\n", acceptErr) panic(acceptErr) } defer conn.Close() defer os.Remove(client) log.Debug("accepted connection") buff := make([]byte, 1) conn.Read(buff) log.Debug("received data") signal <- buff[0] }() cmdArgs := []string{ "start", fmt.Sprintf("--client=%s", client), fmt.Sprintf("--logLevel=%v", r.Config.LogLevel)} if r.Config.Host != "" { cmdArgs = append(cmdArgs, fmt.Sprintf("--host=%s", r.Config.Host)) } cmd := exec.Command(thisAbsPath, cmdArgs...) cmd.Stderr = os.Stderr cmdErr := cmd.Start() failOnError(cmdErr) sigVal := <-signal if sigVal != 0 { fmt.Println("FAILED!") panic(1) } pid, _ := util.ReadPidFile() fmt.Printf("SUCESS!\n\n") fmt.Printf(" The REX-Ray daemon is now running at PID %d. To\n", pid) fmt.Printf(" shutdown the daemon execute the following command:\n\n") fmt.Printf(" sudo %s stop\n\n", thisAbsPath) }
func stop() { checkOpPerms("stopped") if !util.FileExists(util.PidFilePath()) { fmt.Println("REX-Ray is already stopped") panic(1) } fmt.Print("Shutting down REX-Ray...") pid, pidErr := util.ReadPidFile() failOnError(pidErr) proc, procErr := os.FindProcess(pid) failOnError(procErr) killErr := proc.Signal(syscall.SIGHUP) failOnError(killErr) fmt.Println("SUCCESS!") }
func start() { checkOpPerms("started") log.WithField("os.Args", os.Args).Debug("invoking service start") pidFile := util.PidFilePath() if util.FileExists(pidFile) { pid, pidErr := util.ReadPidFile() if pidErr != nil { fmt.Printf("Error reading REX-Ray PID file at %s\n", pidFile) } else { fmt.Printf("REX-Ray already running at PID %d\n", pid) } panic(1) } if fg || client != "" { startDaemon() } else { tryToStartDaemon() } }
func (c *CLI) start() { checkOpPerms("started") log.WithField("os.Args", os.Args).Debug("invoking service start") pidFile := util.PidFilePath() if gotil.FileExists(pidFile) { pid, pidErr := util.ReadPidFile() if pidErr != nil { fmt.Printf("Error reading REX-Ray PID file at %s\n", pidFile) panic(1) } rrproc, err := findProcess(pid) if err != nil { fmt.Printf("Error finding process for PID %d", pid) panic(1) } if rrproc != nil { fmt.Printf("REX-Ray already running at PID %d\n", pid) panic(1) } if err := os.RemoveAll(pidFile); err != nil { fmt.Println("Error removing REX-Ray PID file") panic(1) } } if c.fg || c.client != "" { c.startDaemon() } else { c.tryToStartDaemon() } }