From 9897db06e5bfea3d3c2c9a81bf5031f69e675c29 Mon Sep 17 00:00:00 2001 From: ZhuoQinghui <1302344380@qq.com> Date: Thu, 10 Oct 2024 17:39:36 +0800 Subject: [PATCH] daemon --- main.go | 52 +++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 41 insertions(+), 11 deletions(-) diff --git a/main.go b/main.go index c615229..f597211 100644 --- a/main.go +++ b/main.go @@ -6,6 +6,7 @@ import ( "net" "os" "os/exec" + "path" "path/filepath" "strconv" "syscall" @@ -27,7 +28,11 @@ func main() { const pidFile = "acme-mana.pid" const socketFile = "acme-mana.sock" +var stdout *os.File +var stderr *os.File + func start() { + initLog() log.Println("Run Acme Mana...") args := os.Args if len(args) <= 1 { @@ -49,6 +54,28 @@ func start() { } } +func initLog() { + pwd, err := os.Getwd() + if err != nil { + log.Fatalf("Failed to get current working directory: %v", err) + } + dir := path.Join(pwd, "log") + _, err = os.Stat(dir) + if os.IsNotExist(err) { + err := os.Mkdir(dir, 0777) + if err != nil { + log.Fatalf("Failed to create directory: %v", err) + } + } + outFile, err := os.OpenFile(path.Join(dir, "out.log"), os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644) + defer outFile.Close() + stdout = outFile + + errFile, err := os.OpenFile(path.Join(dir, "err.log"), os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644) + defer stderr.Close() + stderr = errFile +} + func daemonStart() { isDaemon := os.Getenv("GO_DAEMON") log.Println("Run Daemon, DAEMON Is " + isDaemon) @@ -64,13 +91,16 @@ func daemonStart() { log.Fatalf("Failed to get executable path: %v", err) } cmd := exec.Cmd{ - Path: path, - Args: os.Args, - Dir: filepath.Dir(path), - Env: append(os.Environ(), "GO_DAEMON=1"), - Stdin: os.Stdin, - Stdout: os.Stdout, - Stderr: os.Stderr, + Path: path, + Args: os.Args, + Dir: filepath.Dir(path), + Env: append(os.Environ(), "GO_DAEMON=1"), + //Stdin: os.Stdin, + Stdout: stdout, + Stderr: stderr, + //Stdin: os.Stdin, + //Stdout: os.Stdout, + //Stderr: os.Stderr, SysProcAttr: &syscall.SysProcAttr{}, } @@ -190,10 +220,10 @@ func isRunning() bool { log.Println("Failed to find process:", err) return false } - - err = process.Signal(syscall.Signal(0)) - log.Println("Signal result:", err) - return err == nil + return true + //err = process.Signal(syscall.Signal(0)) + //log.Println("Signal result:", err) + //return err == nil } func readPID() (int, error) {