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 a new issue