systemd.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package zdaemon
  2. import (
  3. "fmt"
  4. "git.swzry.com/zry/pathutils"
  5. "os"
  6. "path"
  7. "text/template"
  8. )
  9. const tpl_systemd = `[Unit]
  10. Description={{.Description}}
  11. [Service]
  12. ExecStart={{.ExecPath}} start
  13. ExecStop={{.ExecPath}} stop
  14. [Install]
  15. WantedBy=multi-user.target
  16. `
  17. func (zd *ZDaemon) install_systemd() {
  18. if zd.daemonConfig.InstallMode != "free" {
  19. fmt.Println("Failed install: already installed.")
  20. return
  21. }
  22. initsp := path.Join("/usr/lib/systemd/system/", fmt.Sprintf("%d.service", zd.daemonName))
  23. pe, _ := pathutils.PathExists(initsp)
  24. if pe {
  25. err := os.Remove(initsp)
  26. if err != nil {
  27. fmt.Println("Failed install, old file exist and error in deleting old file: ", err.Error())
  28. return
  29. }
  30. }
  31. otpl := template.New(zd.daemonName)
  32. tpl, err := otpl.Parse(tpl_systemd)
  33. if err != nil {
  34. fmt.Println("Failed install: ", err.Error())
  35. return
  36. }
  37. fids, err := os.OpenFile(initsp, os.O_WRONLY|os.O_CREATE, 0777)
  38. if err != nil {
  39. fmt.Println("Failed install: ", err.Error())
  40. return
  41. }
  42. tdat := map[string]string{
  43. "Description": zd.description,
  44. "ExecPath": zd.executableFileName,
  45. }
  46. err = tpl.Execute(fids, tdat)
  47. if err != nil {
  48. fmt.Println("Failed install: ", err.Error())
  49. _ = fids.Close()
  50. return
  51. }
  52. _ = fids.Close()
  53. zd.daemonConfig.InstallMode = "systemd"
  54. zd.writeStatus()
  55. fmt.Println("Installed.")
  56. }
  57. func (zd *ZDaemon) uninstall_systemd() {
  58. initsp := path.Join("/etc/init.d/", zd.daemonName)
  59. pe, _ := pathutils.PathExists(initsp)
  60. if pe {
  61. err := os.Remove(initsp)
  62. if err != nil {
  63. fmt.Println("Failed uninstall: ", err.Error())
  64. return
  65. }
  66. }
  67. zd.daemonConfig.InstallMode = "free"
  68. zd.writeStatus()
  69. fmt.Println("Uninstalled.")
  70. }