package zdaemon import ( "fmt" "git.swzry.com/zry/pathutils" "os" "path" "strconv" "text/template" ) const tpl_initd_sysv = `#!/bin/sh # chkconfig: - {{.StartOrder}} {{.StopOrder}} # description: {{.Description}} # processname: {{.ExecPath}} # Provides: {{.ExecPath}} # Required-Start: # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: {{.Name}} # Description: {{.Description}} cmd={{ .ExecPath }} $cmd $1 exit 0 ` func (zd *ZDaemon) install_sysv() { if zd.daemonConfig.InstallMode != "free" { fmt.Println("Failed install: already installed.") return } initsp := path.Join("/etc/init.d/", zd.daemonName) pe, _ := pathutils.PathExists(initsp) if pe { err := os.Remove(initsp) if err != nil { fmt.Println("Failed install, old file exist and error in deleting old file: ", err.Error()) return } } otpl := template.New(zd.daemonName) tpl, err := otpl.Parse(tpl_initd_sysv) if err != nil { fmt.Println("Failed install: ", err.Error()) return } fids, err := os.OpenFile(initsp, os.O_WRONLY|os.O_CREATE, 0777) if err != nil { fmt.Println("Failed install: ", err.Error()) return } tdat := map[string]string{ "StartOrder": strconv.Itoa(zd.startOrder), "StopOrder": strconv.Itoa(zd.stopOrder), "Description": zd.description, "ExecPath": zd.executableFileName, "Name": zd.daemonName, } err = tpl.Execute(fids, tdat) if err != nil { fmt.Println("Failed install: ", err.Error()) _ = fids.Close() return } _ = fids.Close() zd.daemonConfig.InstallMode = "sysv" zd.writeStatus() fmt.Println("Installed.") } func (zd *ZDaemon) uninstall_sysv() { initsp := path.Join("/etc/init.d/", zd.daemonName) pe, _ := pathutils.PathExists(initsp) if pe { err := os.Remove(initsp) if err != nil { fmt.Println("Failed uninstall: ", err.Error()) return } } zd.daemonConfig.InstallMode = "free" zd.writeStatus() fmt.Println("Uninstalled.") }