diff options
author | Kamil Trzcinski <ayufan@ayufan.eu> | 2016-02-11 17:33:18 +0300 |
---|---|---|
committer | Kamil Trzcinski <ayufan@ayufan.eu> | 2016-02-12 15:27:26 +0300 |
commit | 88e8fb2a91372ec8a64b82a976a0e51c8f925446 (patch) | |
tree | 968eaa1baa3f48699fdbc70a595c87cf1a14d2c2 /daemon.go | |
parent | 6afb9dd3775d7b16110a320c4e1968934ab430d7 (diff) |
Daemonize
Diffstat (limited to 'daemon.go')
-rw-r--r-- | daemon.go | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/daemon.go b/daemon.go new file mode 100644 index 00000000..54592de8 --- /dev/null +++ b/daemon.go @@ -0,0 +1,66 @@ +package main + +import ( + "log" + "os" + "os/exec" + "os/user" + + "fmt" + "github.com/kardianos/osext" + "strconv" + "syscall" +) + +func daemonize() { + if *pagesUser == "" { + return + } + + path, err := osext.Executable() + if err != nil { + log.Fatalln(err) + } + + u, err := user.Lookup(*pagesUser) + if err != nil { + log.Fatalln(err) + } + + uid, err := strconv.Atoi(u.Uid) + if err != nil { + log.Fatalln(err) + } + + gid, err := strconv.Atoi(u.Gid) + if err != nil { + log.Fatalln(err) + } + + cmd := &exec.Cmd{ + Path: path, + Args: append(os.Args, "-pages-user", "", "-pages-root", "/"), + Stdin: os.Stdin, + Stdout: os.Stdout, + Stderr: os.Stderr, + SysProcAttr: &syscall.SysProcAttr{ + Chroot: *pagesRoot, + Credential: &syscall.Credential{ + Uid: uint32(uid), + Gid: uint32(gid), + }, + //Setsid: true, + Setpgid: true, + }, + } + //cmd.SysProcAttr = nil + + fmt.Println("Deamonizing as", uid, "and", gid, "...") + err = cmd.Run() + if err != nil { + log.Fatalln(err) + os.Exit(1) + } else { + os.Exit(0) + } +} |