51 lines
974 B
Go
51 lines
974 B
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"io/ioutil"
|
||
|
"os"
|
||
|
"os/exec"
|
||
|
"runtime"
|
||
|
"strconv"
|
||
|
)
|
||
|
|
||
|
func getPidFile() string {
|
||
|
return projectFolder + "/.fileboy.pid"
|
||
|
}
|
||
|
|
||
|
func runAsDeamon() (int, error) {
|
||
|
if runtime.GOOS == "windows" {
|
||
|
logAndExit(PreError, "daemons mode cannot run on windows.")
|
||
|
}
|
||
|
err := stopDeamon()
|
||
|
if err != nil {
|
||
|
logAndExit(PreError, err)
|
||
|
}
|
||
|
_, err = exec.LookPath("fileboy")
|
||
|
if err != nil {
|
||
|
logAndExit(PreError, "cannot found `fileboy` command in the PATH")
|
||
|
}
|
||
|
deamon := exec.Command("fileboy")
|
||
|
deamon.Dir = projectFolder
|
||
|
deamon.Env = os.Environ()
|
||
|
deamon.Stdout = os.Stdout
|
||
|
err = deamon.Start()
|
||
|
if err != nil {
|
||
|
logAndExit(PreError, err)
|
||
|
}
|
||
|
pid := deamon.Process.Pid
|
||
|
if pid != 0 {
|
||
|
ioutil.WriteFile(getPidFile(), []byte(strconv.Itoa(pid)), 0644)
|
||
|
}
|
||
|
return pid, nil
|
||
|
}
|
||
|
|
||
|
func stopDeamon() error {
|
||
|
bs, err := ioutil.ReadFile(getPidFile())
|
||
|
if err != nil {
|
||
|
return nil
|
||
|
}
|
||
|
_ = exec.Command("kill", string(bs)).Run()
|
||
|
os.Remove(getPidFile())
|
||
|
return nil
|
||
|
}
|