daemon.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package daemon
  2. import (
  3. "fmt"
  4. "github.com/astaxie/beego/logs"
  5. "os"
  6. "path/filepath"
  7. "github.com/beego/beego/v2/core/logs"
  8. "github.com/beego/beego/v2/server/web"
  9. "github.com/kardianos/service"
  10. "github.com/mindoc-org/mindoc/commands"
  11. "github.com/mindoc-org/mindoc/conf"
  12. "github.com/mindoc-org/mindoc/controllers"
  13. )
  14. type Daemon struct {
  15. config *service.Config
  16. errs chan error
  17. }
  18. func NewDaemon() *Daemon {
  19. config := &service.Config{
  20. Name: "mindocd", //服务显示名称
  21. DisplayName: "MinDoc service", //服务名称
  22. Description: "A document online management program.", //服务描述
  23. WorkingDirectory: conf.WorkingDirectory,
  24. Arguments: os.Args[1:],
  25. }
  26. return &Daemon{
  27. config: config,
  28. errs: make(chan error, 100),
  29. }
  30. }
  31. func (d *Daemon) Config() *service.Config {
  32. return d.config
  33. }
  34. func (d *Daemon) Start(s service.Service) error {
  35. go d.Run()
  36. return nil
  37. }
  38. func (d *Daemon) Run() {
  39. commands.ResolveCommand(d.config.Arguments)
  40. commands.RegisterFunction()
  41. commands.RegisterAutoLoadConfig()
  42. commands.RegisterError()
  43. web.ErrorController(&controllers.ErrorController{})
  44. f, err := filepath.Abs(os.Args[0])
  45. if err != nil {
  46. f = os.Args[0]
  47. }
  48. fmt.Printf("MinDoc version => %s\nbuild time => %s\nstart directory => %s\n%s\n", conf.VERSION, conf.BUILD_TIME, f, conf.GO_VERSION)
  49. web.Run()
  50. }
  51. func (d *Daemon) Stop(s service.Service) error {
  52. if service.Interactive() {
  53. os.Exit(0)
  54. }
  55. return nil
  56. }
  57. func Install() {
  58. d := NewDaemon()
  59. d.config.Arguments = os.Args[3:]
  60. s, err := service.New(d, d.config)
  61. if err != nil {
  62. logs.Error("Create service error => ", err)
  63. os.Exit(1)
  64. }
  65. err = s.Install()
  66. if err != nil {
  67. logs.Error("Install service error:", err)
  68. os.Exit(1)
  69. } else {
  70. logs.Info("Service installed!")
  71. }
  72. os.Exit(0)
  73. }
  74. func Uninstall() {
  75. d := NewDaemon()
  76. s, err := service.New(d, d.config)
  77. if err != nil {
  78. logs.Error("Create service error => ", err)
  79. os.Exit(1)
  80. }
  81. err = s.Uninstall()
  82. if err != nil {
  83. logs.Error("Install service error:", err)
  84. os.Exit(1)
  85. } else {
  86. logs.Info("Service uninstalled!")
  87. }
  88. os.Exit(0)
  89. }
  90. func Restart() {
  91. d := NewDaemon()
  92. s, err := service.New(d, d.config)
  93. if err != nil {
  94. logs.Error("Create service error => ", err)
  95. os.Exit(1)
  96. }
  97. err = s.Restart()
  98. if err != nil {
  99. logs.Error("Install service error:", err)
  100. os.Exit(1)
  101. } else {
  102. logs.Info("Service Restart!")
  103. }
  104. os.Exit(0)
  105. }