123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- package utils
- import (
- "github.com/astaxie/beego"
- "io/ioutil"
- "log"
- "os"
- "os/exec"
- "runtime"
- "strconv"
- "strings"
- )
- func InitDaemon(f string) {
- if len(os.Args) < 2 {
- return
- }
- var args []string
- args = append(args, os.Args[0])
- if len(os.Args) >= 2 {
- args = append(args, os.Args[2:]...)
- }
- args = append(args, "-log=file")
- switch os.Args[1] {
- case "start":
- start(args, f)
- os.Exit(0)
- case "stop":
- stop(f, args[0])
- os.Exit(0)
- case "restart":
- stop(f, args[0])
- start(args, f)
- os.Exit(0)
- }
- }
- func start(osArgs []string, f string) {
- cmd := exec.Command(osArgs[0], osArgs[1:]...)
- cmd.Start()
- log.Println("执行启动成功")
- if cmd.Process.Pid > 0 {
- d1 := []byte(strconv.Itoa(cmd.Process.Pid))
- ioutil.WriteFile(beego.AppPath+"/proxy_"+f+".pid", d1, 0600)
- }
- }
- func stop(f string, p string) {
- var c *exec.Cmd
- var err error
- switch runtime.GOOS {
- case "windows":
- p := strings.Split(p, `\`)
- c = exec.Command("taskkill", "/F", "/IM", p[len(p)-1])
- case "linux", "darwin":
- b, err := ioutil.ReadFile(beego.AppPath + "/proxy_" + f + ".pid")
- if err == nil {
- c = exec.Command("/bin/bash", "-c", `kill -9 `+string(b))
- } else {
- log.Println("停止服务失败,pid文件不存在")
- }
- }
- err = c.Run()
- if err != nil {
- log.Println("停止服务失败,", err)
- } else {
- log.Println("停止服务成功")
- }
- }
|