From 209dd22ea0c6ea06aca47cb53f68ae2cf0d40831 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Thu, 3 May 2018 14:50:57 +0200 Subject: Daemonize with environment variable --- daemon.go | 25 ------------------------- main.go | 25 +++++++++++++++++++------ 2 files changed, 19 insertions(+), 31 deletions(-) delete mode 100644 daemon.go diff --git a/daemon.go b/daemon.go deleted file mode 100644 index e2ded87..0000000 --- a/daemon.go +++ /dev/null @@ -1,25 +0,0 @@ -package main - -import ( - "os" -) - -func Daemonize(attr *os.ProcAttr) error { - path, err := os.Executable() - if err != nil { - return err - } - - argv := []string{os.Args[0], "--foreground"} - argv = append(argv, os.Args[1:]...) - process, err := os.StartProcess( - path, - argv, - attr, - ) - if err != nil { - return err - } - process.Release() - return nil -} diff --git a/main.go b/main.go index 3358469..f0705c8 100644 --- a/main.go +++ b/main.go @@ -4,7 +4,6 @@ import ( "fmt" "os" "os/signal" - "runtime" "strconv" ) @@ -16,6 +15,7 @@ const ( const ( ENV_WG_TUN_FD = "WG_TUN_FD" ENV_WG_UAPI_FD = "WG_UAPI_FD" + ENV_WG_PROCESS_FOREGROUND = "WG_PROCESS_FOREGROUND" ) func printUsage() { @@ -55,6 +55,10 @@ func main() { interfaceName = os.Args[1] } + if !foreground { + foreground = os.Getenv(ENV_WG_PROCESS_FOREGROUND) == "1" + } + // get log level (default: info) logLevel := func() int { @@ -129,6 +133,7 @@ func main() { env := os.Environ() env = append(env, fmt.Sprintf("%s=3", ENV_WG_TUN_FD)) env = append(env, fmt.Sprintf("%s=4", ENV_WG_UAPI_FD)) + env = append(env, fmt.Sprintf("%s=1", ENV_WG_PROCESS_FOREGROUND)) attr := &os.ProcAttr{ Files: []*os.File{ nil, // stdin @@ -140,18 +145,26 @@ func main() { Dir: ".", Env: env, } - err = Daemonize(attr) + + path, err := os.Executable() + if err != nil { + logger.Error.Println("Failed to determine executable:", err) + os.Exit(ExitSetupFailed) + } + + process, err := os.StartProcess( + path, + os.Args, + attr, + ) if err != nil { logger.Error.Println("Failed to daemonize:", err) os.Exit(ExitSetupFailed) } + process.Release() return } - // increase number of go workers (for Go <1.5) - - runtime.GOMAXPROCS(runtime.NumCPU()) - // create wireguard device device := NewDevice(tun, logger) -- cgit v1.2.3-59-g8ed1b