Browse Source

custom systemd service script, increase open files limit

ffdfgdfg 5 years ago
parent
commit
c7a5388cfd
1 changed files with 34 additions and 8 deletions
  1. 34 8
      cmd/nps/nps.go

+ 34 - 8
cmd/nps/nps.go

@@ -28,6 +28,31 @@ var (
 	level string
 )
 
+const systemdScript = `[Unit]
+Description={{.Description}}
+ConditionFileIsExecutable={{.Path|cmdEscape}}
+{{range $i, $dep := .Dependencies}} 
+{{$dep}} {{end}}
+[Service]
+LimitNOFILE=65536
+StartLimitInterval=5
+StartLimitBurst=10
+ExecStart={{.Path|cmdEscape}}{{range .Arguments}} {{.|cmd}}{{end}}
+{{if .ChRoot}}RootDirectory={{.ChRoot|cmd}}{{end}}
+{{if .WorkingDirectory}}WorkingDirectory={{.WorkingDirectory|cmdEscape}}{{end}}
+{{if .UserName}}User={{.UserName}}{{end}}
+{{if .ReloadSignal}}ExecReload=/bin/kill -{{.ReloadSignal}} "$MAINPID"{{end}}
+{{if .PIDFile}}PIDFile={{.PIDFile|cmd}}{{end}}
+{{if and .LogOutput .HasOutputFileSupport -}}
+StandardOutput=file:/var/log/{{.Name}}.out
+StandardError=file:/var/log/{{.Name}}.err
+{{- end}}
+Restart=always
+RestartSec=120
+[Install]
+WantedBy=multi-user.target
+`
+
 func main() {
 	flag.Parse()
 	// init log
@@ -49,8 +74,6 @@ func main() {
 	}
 	// init service
 	options := make(service.KeyValue)
-	options["Restart"] = "on-success"
-	options["SuccessExitStatus"] = "1 2 8 SIGKILL"
 	svcConfig := &service.Config{
 		Name:        "Nps",
 		DisplayName: "nps内网穿透代理服务器",
@@ -59,14 +82,15 @@ func main() {
 	}
 	svcConfig.Arguments = append(svcConfig.Arguments, "service")
 	if len(os.Args) > 1 && os.Args[1] == "service" {
-		logs.SetLogger(logs.AdapterFile, `{"level":`+level+`,"filename":"`+logPath+`","daily":false,"maxlines":100000,"color":true}`)
+		_ = logs.SetLogger(logs.AdapterFile, `{"level":`+level+`,"filename":"`+logPath+`","daily":false,"maxlines":100000,"color":true}`)
 	} else {
-		logs.SetLogger(logs.AdapterConsole, `{"level":`+level+`,"color":true}`)
+		_ = logs.SetLogger(logs.AdapterConsole, `{"level":`+level+`,"color":true}`)
 	}
 	if !common.IsWindows() {
 		svcConfig.Dependencies = []string{
 			"Requires=network.target",
 			"After=network-online.target syslog.target"}
+		svcConfig.Option["SystemdScript"] = systemdScript
 	}
 	prg := &nps{}
 	prg.exit = make(chan struct{})
@@ -82,8 +106,8 @@ func main() {
 			return
 		case "install":
 			// uninstall before
-			service.Control(s, "stop")
-			service.Control(s, "uninstall")
+			_ = service.Control(s, "stop")
+			_ = service.Control(s, "uninstall")
 
 			binPath := install.InstallNps()
 			svcConfig.Executable = binPath
@@ -111,7 +135,7 @@ func main() {
 			return
 		}
 	}
-	s.Run()
+	_ = s.Run()
 }
 
 type nps struct {
@@ -119,10 +143,12 @@ type nps struct {
 }
 
 func (p *nps) Start(s service.Service) error {
-	p.run()
+	_, _ = s.Status()
+	_ = p.run()
 	return nil
 }
 func (p *nps) Stop(s service.Service) error {
+	_, _ = s.Status()
 	close(p.exit)
 	if service.Interactive() {
 		os.Exit(0)