daemon.go 2.4 KB

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