main.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "os"
  6. "runtime"
  7. "time"
  8. "53it.net/go-daemon/godaemon"
  9. "github.com/kardianos/service"
  10. )
  11. // 程序版本
  12. var (
  13. VERSION string
  14. BUILD_TIME string
  15. GO_VERSION string
  16. GIT_HASH string
  17. )
  18. // 程序全局变量
  19. var (
  20. configPath *string
  21. logger service.Logger
  22. goDaemon *godaemon.GoDaemon
  23. )
  24. type program struct{}
  25. func (p *program) Start(s service.Service) error {
  26. // 开启异步任务,开启服务
  27. go p.run()
  28. return nil
  29. }
  30. func (p *program) run() {
  31. // 存储pid
  32. err := godaemon.WritePidToFile("go-daemon")
  33. if err != nil {
  34. log.Println("写pid文件错误")
  35. }
  36. // 实例化web服务
  37. goDaemon = godaemon.NewGoDaemon()
  38. goDaemon.Run()
  39. }
  40. func (p *program) Stop(s service.Service) error {
  41. // 删除pid文件
  42. godaemon.RemovePidFile("go-daemon")
  43. // 关闭连接
  44. goDaemon.Stop()
  45. // 停止任务,3秒后返回
  46. <-time.After(time.Second * 1)
  47. return nil
  48. }
  49. func main() {
  50. // 全部核心运行程序
  51. runtime.GOMAXPROCS(runtime.NumCPU())
  52. svcConfig := &service.Config{
  53. Name: "go-daemon.53it.net",
  54. DisplayName: "go-daemon.53it.net",
  55. Description: "go-daemon 使用golang开发的守护其它进程的服务",
  56. }
  57. // 实例化
  58. prg := &program{}
  59. s, err := service.New(prg, svcConfig)
  60. if err != nil {
  61. log.Fatal(err)
  62. }
  63. // 接收一个参数,install | uninstall | start | stop | restart
  64. if len(os.Args) > 1 {
  65. if os.Args[1] == "-v" || os.Args[1] == "-version" {
  66. ver := fmt.Sprintf("Version: %s\nBuilt: %s\nGo version: %s\nGit commit: %s", VERSION, BUILD_TIME, GO_VERSION, GIT_HASH)
  67. fmt.Println(ver)
  68. return
  69. }
  70. // 判断是否传入配置文件路径
  71. if os.Args[1] == "-config" {
  72. if len(os.Args) < 3 {
  73. log.Println("参数错误,需要传入配置文件地址")
  74. return
  75. }
  76. err = goDaemon.SetCfgPath(os.Args[2])
  77. if err != nil {
  78. log.Println("配置文件读取错误", err)
  79. return
  80. }
  81. } else {
  82. err = service.Control(s, os.Args[1])
  83. if err != nil {
  84. log.Fatal(err)
  85. }
  86. return
  87. }
  88. // err = s.Run()
  89. // if err != nil {
  90. // logger.Error(err)
  91. // }
  92. }
  93. logger, err = s.Logger(nil)
  94. if err != nil {
  95. log.Fatal(err)
  96. }
  97. err = s.Run()
  98. if err != nil {
  99. logger.Error(err)
  100. }
  101. }