浏览代码

添加对 mindoc-daemon 的支持

gsw945 2 年之前
父节点
当前提交
91f3e897bf
共有 2 个文件被更改,包括 34 次插入7 次删除
  1. 3 0
      README.md
  2. 31 7
      main.go

+ 3 - 0
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
 #邮件配置-示例

+ 31 - 7
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)
+		if err := s.Run(); err != nil {
+			log.Fatal("启动程序失败 ->", err)
+		}
+	} else {
+		d.Run()
 	}
+
 }