Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-pages.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamil Trzcinski <ayufan@ayufan.eu>2016-02-11 17:33:18 +0300
committerKamil Trzcinski <ayufan@ayufan.eu>2016-02-12 15:27:26 +0300
commit88e8fb2a91372ec8a64b82a976a0e51c8f925446 (patch)
tree968eaa1baa3f48699fdbc70a595c87cf1a14d2c2 /daemon.go
parent6afb9dd3775d7b16110a320c4e1968934ab430d7 (diff)
Daemonize
Diffstat (limited to 'daemon.go')
-rw-r--r--daemon.go66
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)
+ }
+}