main.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. ui, err := NewWebUI(":8080")
  21. if err != nil {
  22. return err
  23. }
  24. p.webUI = ui
  25. fmt.Println("webui starting on http :8080")
  26. go func() {
  27. if err := ui.Start(); err != nil {
  28. fmt.Printf("webui stopped: %v\n", err)
  29. os.Exit(1)
  30. }
  31. }()
  32. return nil
  33. }
  34. // Stop should not block. Return with a few seconds.
  35. func (p *program) Stop(s service.Service) error {
  36. if p.webUI != nil {
  37. return p.webUI.Stop()
  38. }
  39. return nil
  40. }
  41. func main() {
  42. svcFlag := flag.String("service", "", "Control the yfkj-webui service.")
  43. flag.Parse()
  44. svcConfig := &service.Config{
  45. Name: "yfkj-webui",
  46. DisplayName: "yfkj-webui",
  47. Description: "Yunfei Device Web Management UI",
  48. Option: map[string]any{
  49. "Restart": "always",
  50. },
  51. }
  52. servicelib.WriteVersionFile(baseapp.EXEC_DIR, Version) //-> for 升级
  53. prg := &program{
  54. name: "WebUI",
  55. }
  56. svc, err := service.New(prg, svcConfig)
  57. if err != nil {
  58. fmt.Printf("%s.service creation failed: %v\n",
  59. svcConfig.Name, err)
  60. os.Exit(1)
  61. }
  62. if *svcFlag != "" {
  63. if err := service.Control(svc, *svcFlag); err != nil {
  64. fmt.Println(err)
  65. }
  66. return
  67. }
  68. if err := svc.Run(); err != nil {
  69. fmt.Println(err)
  70. os.Exit(1)
  71. }
  72. }