service.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package commands
  2. import (
  3. "crm-api/pkg/lfshook"
  4. "fmt"
  5. "github.com/kardianos/service"
  6. "github.com/urfave/cli"
  7. )
  8. var logger service.Logger
  9. type program struct {
  10. ctx *cli.Context
  11. }
  12. func (p *program) Start(s service.Service) error {
  13. go p.run()
  14. return nil
  15. }
  16. func (p *program) run() {
  17. runWeb(p.ctx)
  18. }
  19. func (p *program) Stop(s service.Service) error {
  20. // Stop should not block. Return with a few seconds.
  21. return nil
  22. }
  23. // CmdService cli 命令
  24. var CmdService = cli.Command{
  25. Name: "service",
  26. Usage: "Run the program as a service",
  27. Description: "PBX API install/uninstall",
  28. Action: runService,
  29. Flags: []cli.Flag{
  30. cli.StringFlag{Name: "action, a", Usage: "install/uninstall/start/stop"},
  31. cli.StringFlag{Name: "config, c", Usage: "配置文件路径"},
  32. cli.Int64Flag{Name: "port, p", Usage: "默认绑定端口 8080", Value: 8080},
  33. cli.StringFlag{Name: "host", Usage: "默认绑定地址 0.0.0.0", Value: "0.0.0.0"},
  34. },
  35. }
  36. func runService(ctx *cli.Context) {
  37. svcConfig := &service.Config{
  38. Name: "PBX-API",
  39. DisplayName: "PBX-API",
  40. Description: "PBX-API as service.",
  41. Arguments: []string{"web", "--config", ctx.String("config")},
  42. }
  43. prg := &program{
  44. ctx: ctx,
  45. }
  46. s, err := service.New(prg, svcConfig)
  47. if err != nil {
  48. lfshook.NewLogger().Fatal(err)
  49. }
  50. logger, err = s.Logger(nil)
  51. if err != nil {
  52. lfshook.NewLogger().Fatal(err)
  53. }
  54. switch ctx.String("action") {
  55. case "install":
  56. if !ctx.IsSet("config") {
  57. fmt.Print("install must set config path, please by -config set")
  58. return
  59. }
  60. err = s.Install()
  61. if err != nil {
  62. fmt.Println("install err", err)
  63. } else {
  64. fmt.Println("install success")
  65. }
  66. return
  67. case "uninstall":
  68. err = s.Uninstall()
  69. if err != nil {
  70. fmt.Println("Uninstall err", err)
  71. } else {
  72. fmt.Println("Uninstall success")
  73. }
  74. return
  75. case "start":
  76. s.Start()
  77. return
  78. case "stop":
  79. s.Stop()
  80. return
  81. }
  82. err = s.Run()
  83. if err != nil {
  84. logger.Error(err)
  85. }
  86. }