Daemonize with environment variable
This commit is contained in:
		
							parent
							
								
									258a9223b9
								
							
						
					
					
						commit
						209dd22ea0
					
				
							
								
								
									
										25
									
								
								daemon.go
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								daemon.go
									
									
									
									
									
								
							@ -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
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										25
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								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)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user