main.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. "os"
  6. "rtu_linux_services/servicelib"
  7. "github.com/kardianos/service"
  8. "hnyfkj.com.cn/rtu/linux/baseapp"
  9. )
  10. var (
  11. Version = "0.0.0.1"
  12. BuildTime = ""
  13. )
  14. type program struct {
  15. name string
  16. webUI *WebUI
  17. }
  18. // Start should not block. Do the actual work async.
  19. func (p *program) Start(s service.Service) error {
  20. logCfgFile, err := servicelib.EnsureDefaultLogConfig()
  21. if err != nil {
  22. return err
  23. }
  24. baseapp.InitLogger(logCfgFile)
  25. baseapp.Logger.Infof("[%s] 开始运行, 程序版本: %s, 构建时间: %s", p.name, Version, BuildTime)
  26. ui, err := NewWebUI(":8080")
  27. if err != nil {
  28. return err
  29. }
  30. p.webUI = ui
  31. baseapp.Logger.Infof("[%s] Web UI starting on http :8080 ...", p.name)
  32. go func() {
  33. if err := ui.Start(); err != nil {
  34. baseapp.Logger.Warnf("[%s] Web UI stopped: %v\n!", p.name, err)
  35. os.Exit(1)
  36. }
  37. }()
  38. return nil
  39. }
  40. // Stop should not block. Return with a few seconds.
  41. func (p *program) Stop(s service.Service) error {
  42. if p.webUI != nil {
  43. return p.webUI.Stop()
  44. }
  45. baseapp.Logger.Infof("[%s] 程序退出", p.name)
  46. baseapp.ExitLogger()
  47. return nil
  48. }
  49. func main() {
  50. baseapp.SetOptDirs(false, false, false, false)
  51. baseapp.InitPath()
  52. svcFlag := flag.String("service", "", "Control the yfkj-web-ui service.")
  53. flag.Parse()
  54. svcConfig := &service.Config{
  55. Name: "yfkj-web-ui",
  56. DisplayName: "yfkj-web-ui",
  57. Description: "Yunfei Device Web Management UI",
  58. Option: map[string]any{
  59. "Restart": "always",
  60. },
  61. }
  62. servicelib.WriteVersionFile(baseapp.EXEC_DIR, Version) //-> for 升级
  63. initCPUUsage()
  64. prg := &program{
  65. name: "WebUI",
  66. }
  67. svc, err := service.New(prg, svcConfig)
  68. if err != nil {
  69. fmt.Printf("%s.service creation failed: %v\n",
  70. svcConfig.Name, err)
  71. os.Exit(1)
  72. }
  73. if *svcFlag != "" {
  74. if err := service.Control(svc, *svcFlag); err != nil {
  75. fmt.Println(err)
  76. }
  77. return
  78. }
  79. if err := svc.Run(); err != nil {
  80. fmt.Println(err)
  81. os.Exit(1)
  82. }
  83. }