run_unix.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. // +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
  2. package zdaemon
  3. import (
  4. "fmt"
  5. "git.swzry.com/zry/pathutils"
  6. "os"
  7. "path"
  8. "syscall"
  9. )
  10. func (zd *ZDaemon) makeIPCDir() {
  11. _ = pathutils.MkDirIfNotExist(path.Join(zd.zdaemonPath, "ipc"), 0777)
  12. }
  13. func (zd *ZDaemon) cleanIPCUnixSock() {
  14. _ = os.RemoveAll(path.Join(zd.zdaemonPath, "ipc"))
  15. }
  16. func (zd *ZDaemon) start() {
  17. if zd.checkRunning() {
  18. fmt.Println("Already running. If you think it is dead, using 'restart' instead.")
  19. return
  20. }
  21. sa := &syscall.SysProcAttr{
  22. Chroot: "",
  23. Credential: nil,
  24. Ptrace: false,
  25. Setsid: false,
  26. Setpgid: false,
  27. Setctty: false,
  28. Noctty: false,
  29. Ctty: 0,
  30. Foreground: false,
  31. Pgid: 0,
  32. Pdeathsig: 0,
  33. Cloneflags: 0,
  34. Unshareflags: 0,
  35. UidMappings: nil,
  36. GidMappings: nil,
  37. GidMappingsEnableSetgroups: false,
  38. AmbientCaps: nil,
  39. }
  40. p, err := os.StartProcess(os.Args[0], []string{os.Args[0], "__run__"}, &os.ProcAttr{
  41. Dir: zd.programPath,
  42. Env: os.Environ(),
  43. Files: []*os.File{
  44. zd.programStdin,
  45. zd.programStdout,
  46. zd.programStderr,
  47. },
  48. Sys: sa,
  49. })
  50. if err != nil {
  51. fmt.Println("Failed start: ", err.Error())
  52. } else {
  53. fmt.Println("Daemon", zd.daemonName, "started. PID=", p.Pid)
  54. }
  55. }