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  }