github.com/Mrs4s/go-cqhttp@v1.2.0/server/daemon.go (about) 1 package server 2 3 // daemon 功能写在这,目前仅支持了-d 作为后台运行参数,stop,start,restart这些功能目前看起来并不需要,可以通过api控制,后续需要的话再补全。 4 5 import ( 6 "os" 7 "os/exec" 8 "path/filepath" 9 "strconv" 10 "strings" 11 12 "github.com/Mrs4s/go-cqhttp/global" 13 14 log "github.com/sirupsen/logrus" 15 ) 16 17 // Daemon go-cqhttp server 的 daemon的实现函数 18 func Daemon() { 19 args := os.Args[1:] 20 21 execArgs := make([]string, 0) 22 23 l := len(args) 24 for i := 0; i < l; i++ { 25 if strings.Index(args[i], "-d") == 0 { 26 continue 27 } 28 29 execArgs = append(execArgs, args[i]) 30 } 31 32 ex, _ := os.Executable() 33 p, _ := filepath.Abs(ex) 34 proc := exec.Command(p, execArgs...) 35 err := proc.Start() 36 if err != nil { 37 panic(err) 38 } 39 40 log.Info("[PID] ", proc.Process.Pid) 41 // pid写入到pid文件中,方便后续stop的时候kill 42 pidErr := savePid("go-cqhttp.pid", strconv.FormatInt(int64(proc.Process.Pid), 10)) 43 if pidErr != nil { 44 log.Errorf("save pid file error: %v", pidErr) 45 } 46 47 os.Exit(0) 48 } 49 50 // savePid 保存pid到文件中,便于后续restart/stop的时候kill pid用。 51 func savePid(path string, data string) error { 52 return global.WriteAllText(path, data) 53 }