diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-05-03 14:50:57 +0200 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-05-03 14:55:10 +0200 |
commit | 209dd22ea0c6ea06aca47cb53f68ae2cf0d40831 (patch) | |
tree | b65d08d1a5678bf93279570aaf796eb19511db6e /main.go | |
parent | 258a9223b9ab18a973c44b238e029a0dc5640102 (diff) |
Daemonize with environment variable
Diffstat (limited to 'main.go')
-rw-r--r-- | main.go | 25 |
1 files changed, 19 insertions, 6 deletions
@@ -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) |