custom systemd service script, increase open files limit

This commit is contained in:
ffdfgdfg 2020-01-22 11:47:24 +08:00
parent 109821b068
commit c7a5388cfd
1 changed files with 34 additions and 8 deletions

View File

@ -28,6 +28,31 @@ var (
level string 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() { func main() {
flag.Parse() flag.Parse()
// init log // init log
@ -49,8 +74,6 @@ func main() {
} }
// init service // init service
options := make(service.KeyValue) options := make(service.KeyValue)
options["Restart"] = "on-success"
options["SuccessExitStatus"] = "1 2 8 SIGKILL"
svcConfig := &service.Config{ svcConfig := &service.Config{
Name: "Nps", Name: "Nps",
DisplayName: "nps内网穿透代理服务器", DisplayName: "nps内网穿透代理服务器",
@ -59,14 +82,15 @@ func main() {
} }
svcConfig.Arguments = append(svcConfig.Arguments, "service") svcConfig.Arguments = append(svcConfig.Arguments, "service")
if len(os.Args) > 1 && os.Args[1] == "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 { } else {
logs.SetLogger(logs.AdapterConsole, `{"level":`+level+`,"color":true}`) _ = logs.SetLogger(logs.AdapterConsole, `{"level":`+level+`,"color":true}`)
} }
if !common.IsWindows() { if !common.IsWindows() {
svcConfig.Dependencies = []string{ svcConfig.Dependencies = []string{
"Requires=network.target", "Requires=network.target",
"After=network-online.target syslog.target"} "After=network-online.target syslog.target"}
svcConfig.Option["SystemdScript"] = systemdScript
} }
prg := &nps{} prg := &nps{}
prg.exit = make(chan struct{}) prg.exit = make(chan struct{})
@ -82,8 +106,8 @@ func main() {
return return
case "install": case "install":
// uninstall before // uninstall before
service.Control(s, "stop") _ = service.Control(s, "stop")
service.Control(s, "uninstall") _ = service.Control(s, "uninstall")
binPath := install.InstallNps() binPath := install.InstallNps()
svcConfig.Executable = binPath svcConfig.Executable = binPath
@ -111,7 +135,7 @@ func main() {
return return
} }
} }
s.Run() _ = s.Run()
} }
type nps struct { type nps struct {
@ -119,10 +143,12 @@ type nps struct {
} }
func (p *nps) Start(s service.Service) error { func (p *nps) Start(s service.Service) error {
p.run() _, _ = s.Status()
_ = p.run()
return nil return nil
} }
func (p *nps) Stop(s service.Service) error { func (p *nps) Stop(s service.Service) error {
_, _ = s.Status()
close(p.exit) close(p.exit)
if service.Interactive() { if service.Interactive() {
os.Exit(0) os.Exit(0)