initd_sysv.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package zdaemon
  2. import (
  3. "fmt"
  4. "git.swzry.com/zry/pathutils"
  5. "os"
  6. "path"
  7. "strconv"
  8. "text/template"
  9. )
  10. const tpl_initd_sysv = `#!/bin/sh
  11. # chkconfig: - {{.StartOrder}} {{.StopOrder}}
  12. # description: {{.Description}}
  13. # processname: {{.ExecPath}}
  14. # Provides: {{.ExecPath}}
  15. # Required-Start:
  16. # Required-Stop:
  17. # Default-Start: 2 3 4 5
  18. # Default-Stop: 0 1 6
  19. # Short-Description: {{.Name}}
  20. # Description: {{.Description}}
  21. cmd={{ .ExecPath }}
  22. $cmd $1
  23. exit 0
  24. `
  25. func (zd *ZDaemon) install_sysv() {
  26. if zd.daemonConfig.InstallMode != "free" {
  27. fmt.Println("Failed install: already installed.")
  28. return
  29. }
  30. initsp := path.Join("/etc/init.d/", zd.daemonName)
  31. pe, _ := pathutils.PathExists(initsp)
  32. if pe {
  33. err := os.Remove(initsp)
  34. if err != nil {
  35. fmt.Println("Failed install, old file exist and error in deleting old file: ", err.Error())
  36. return
  37. }
  38. }
  39. otpl := template.New(zd.daemonName)
  40. tpl, err := otpl.Parse(tpl_initd_sysv)
  41. if err != nil {
  42. fmt.Println("Failed install: ", err.Error())
  43. return
  44. }
  45. fids, err := os.OpenFile(initsp, os.O_WRONLY|os.O_CREATE, 0777)
  46. if err != nil {
  47. fmt.Println("Failed install: ", err.Error())
  48. return
  49. }
  50. tdat := map[string]string{
  51. "StartOrder": strconv.Itoa(zd.startOrder),
  52. "StopOrder": strconv.Itoa(zd.stopOrder),
  53. "Description": zd.description,
  54. "ExecPath": zd.executableFileName,
  55. "Name": zd.daemonName,
  56. }
  57. err = tpl.Execute(fids, tdat)
  58. if err != nil {
  59. fmt.Println("Failed install: ", err.Error())
  60. _ = fids.Close()
  61. return
  62. }
  63. _ = fids.Close()
  64. zd.daemonConfig.InstallMode = "sysv"
  65. zd.writeStatus()
  66. fmt.Println("Installed.")
  67. }
  68. func (zd *ZDaemon) uninstall_sysv() {
  69. initsp := path.Join("/etc/init.d/", zd.daemonName)
  70. pe, _ := pathutils.PathExists(initsp)
  71. if pe {
  72. err := os.Remove(initsp)
  73. if err != nil {
  74. fmt.Println("Failed uninstall: ", err.Error())
  75. return
  76. }
  77. }
  78. zd.daemonConfig.InstallMode = "free"
  79. zd.writeStatus()
  80. fmt.Println("Uninstalled.")
  81. }