diff --git a/README.md b/README.md index 13a3e833..97f01280 100644 --- a/README.md +++ b/README.md @@ -94,6 +94,9 @@ go build -v -o mindoc_linux_musl_amd64 -ldflags="-linkmode external -extldflags ./mindoc_linux_musl_amd64 version ``` +## Windows 上后台运行 + 使用 [mindoc-daemon](https://github.com/mindoc-org/mindoc-daemon) + ```ini #邮件配置-示例 diff --git a/main.go b/main.go index abdbf673..0edfe016 100644 --- a/main.go +++ b/main.go @@ -2,8 +2,12 @@ package main import ( "fmt" + "io/ioutil" "log" "os" + "path/filepath" + "runtime" + "strings" _ "github.com/beego/beego/v2/server/web/session/memcache" _ "github.com/beego/beego/v2/server/web/session/mysql" @@ -15,6 +19,21 @@ import ( _ "github.com/mindoc-org/mindoc/routers" ) +func isViaDaemonUnix() bool { + parentPid := os.Getppid() + + cmdLineBytes, err := ioutil.ReadFile(fmt.Sprintf("/proc/%d/cmdline", parentPid)) + if err != nil { + return false + } + + cmdLine := string(cmdLineBytes) + executable := strings.Split(cmdLine, " ")[0] + fmt.Printf("Parent executable: %s\n", executable) + filename := filepath.Base(executable) + return strings.Contains(filename, "mindoc-daemon") +} + func main() { if len(os.Args) >= 3 && os.Args[1] == "service" { @@ -30,14 +49,19 @@ func main() { d := daemon.NewDaemon() - s, err := service.New(d, d.Config()) + if runtime.GOOS != "windows" && !isViaDaemonUnix() { + s, err := service.New(d, d.Config()) - if err != nil { - fmt.Println("Create service error => ", err) - os.Exit(1) + if err != nil { + fmt.Println("Create service error => ", err) + os.Exit(1) + } + + if err := s.Run(); err != nil { + log.Fatal("启动程序失败 ->", err) + } + } else { + d.Run() } - if err := s.Run(); err != nil { - log.Fatal("启动程序失败 ->", err) - } }