Skip to content

Commit a39b0c4

Browse files
committed
fix: systemd always restart service even though success running
1 parent 8931548 commit a39b0c4

3 files changed

Lines changed: 73 additions & 55 deletions

File tree

deploy/systemd/mkblog.service.tpl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
[Unit]
22
Description=__APP_NAME__ blog service
33
After=network.target
4+
StartLimitIntervalSec=60
5+
StartLimitBurst=5
46

57
[Service]
68
Type=simple
79
User=__USER__
810
Group=__GROUP__
911
WorkingDirectory=__ROOT_DIR__
1012
ExecStart=__BIN_PATH__
11-
Restart=always
13+
Restart=on-failure
1214
RestartSec=3
1315

1416
[Install]

main.go

Lines changed: 54 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,54 @@
1-
package main
2-
3-
import (
4-
"flag"
5-
"mkBlog/config"
6-
"mkBlog/models"
7-
"mkBlog/pkg/bloom"
8-
"mkBlog/pkg/cache"
9-
"mkBlog/pkg/log"
10-
"mkBlog/pkg/middleware"
11-
"mkBlog/pkg/router"
12-
"mkBlog/service"
13-
"os"
14-
)
15-
16-
func Init(debugflag *bool) {
17-
if err := os.MkdirAll(models.Default_Data_Path, 0755); err != nil {
18-
return
19-
}
20-
if debugflag != nil {
21-
log.Init(*debugflag)
22-
} else {
23-
log.Init(false)
24-
}
25-
26-
config.Init()
27-
28-
bloom.Init()
29-
cache.Init(models.Default_Static_File_Path)
30-
middleware.Init()
31-
}
32-
33-
func main() {
34-
debug := flag.Bool("debug", false, "启用调试模式")
35-
36-
// 解析命令行参数
37-
flag.Parse()
38-
Init(debug)
39-
40-
if err := router.InitRouter(); err != nil {
41-
panic("failed to create router: " + err.Error())
42-
}
43-
44-
if s, err := service.NewBlogService(); err == nil {
45-
s.Start()
46-
}
47-
48-
}
1+
package main
2+
3+
import (
4+
"flag"
5+
"log/slog"
6+
"mkBlog/config"
7+
"mkBlog/models"
8+
"mkBlog/pkg/bloom"
9+
"mkBlog/pkg/cache"
10+
applog "mkBlog/pkg/log"
11+
"mkBlog/pkg/middleware"
12+
"mkBlog/pkg/router"
13+
"mkBlog/service"
14+
"os"
15+
)
16+
17+
func Init(debugflag *bool) {
18+
if err := os.MkdirAll(models.Default_Data_Path, 0755); err != nil {
19+
return
20+
}
21+
if debugflag != nil {
22+
applog.Init(*debugflag)
23+
} else {
24+
applog.Init(false)
25+
}
26+
27+
config.Init()
28+
29+
bloom.Init()
30+
cache.Init(models.Default_Static_File_Path)
31+
middleware.Init()
32+
}
33+
34+
func main() {
35+
debug := flag.Bool("debug", false, "启用调试模式")
36+
37+
// 解析命令行参数
38+
flag.Parse()
39+
Init(debug)
40+
41+
if err := router.InitRouter(); err != nil {
42+
panic("failed to create router: " + err.Error())
43+
}
44+
45+
s, err := service.NewBlogService()
46+
if err != nil {
47+
slog.Error("failed to initialize blog service", "error", err)
48+
os.Exit(1)
49+
}
50+
if err := s.Start(); err != nil {
51+
slog.Error("blog service stopped", "error", err)
52+
os.Exit(1)
53+
}
54+
}

service/service.go

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package service
22

33
import (
44
"crypto/tls"
5+
"errors"
56
"fmt"
67
"log"
78
"log/slog"
@@ -10,6 +11,7 @@ import (
1011
"mkBlog/pkg/router"
1112
tlscert "mkBlog/pkg/tls_cert"
1213
"mkBlog/service/api"
14+
"net"
1315
"net/http"
1416
_ "net/http/pprof"
1517
"os"
@@ -76,17 +78,22 @@ func NewBlogService() (*BlogService, error) {
7678
return &service, nil
7779
}
7880

79-
func (s *BlogService) Start() {
81+
func (s *BlogService) Start() error {
8082
if config.Cfg.Server.Devmode {
8183
go func() {
8284
log.Println(http.ListenAndServe(":6060", nil))
8385
}()
8486
}
87+
addr := ":" + fmt.Sprint(config.Cfg.Server.Port)
8588
if config.Cfg.Server.HTTP3Enabled {
8689
tlscert.LoadCert()
90+
conn, err := net.ListenPacket("udp", addr)
91+
if err != nil {
92+
return fmt.Errorf("start HTTP3 server: %w", err)
93+
}
8794
srv := http3.Server{
8895
Handler: router.GetRouter(),
89-
Addr: ":" + fmt.Sprint(config.Cfg.Server.Port),
96+
Addr: addr,
9097
TLSConfig: http3.ConfigureTLSConfig(&tls.Config{
9198
MinVersion: tls.VersionTLS13,
9299
GetCertificate: tlscert.GetCurrentCert,
@@ -95,7 +102,7 @@ func (s *BlogService) Start() {
95102
}
96103
slog.Info("starting HTTP3 server", "port", config.Cfg.Server.Port)
97104
go func() {
98-
if err := srv.ListenAndServe(); err != nil {
105+
if err := srv.Serve(conn); err != nil && !errors.Is(err, http.ErrServerClosed) {
99106
slog.Error("failed to start HTTP3 server", "error", err)
100107
}
101108
}()
@@ -108,20 +115,23 @@ func (s *BlogService) Start() {
108115
if config.Cfg.TLS.Enabled {
109116
tlscert.LoadCert()
110117
srv := &http.Server{
111-
Addr: ":" + fmt.Sprint(config.Cfg.Server.Port),
118+
Addr: addr,
112119
Handler: router.GetRouter(),
113120
TLSConfig: &tls.Config{
114121
MinVersion: tls.VersionTLS12,
115122
GetCertificate: tlscert.GetCurrentCert,
116123
},
117124
}
118125
// Start HTTPS server
119-
if err := srv.ListenAndServeTLS("", ""); err != nil {
126+
if err := srv.ListenAndServeTLS("", ""); err != nil && !errors.Is(err, http.ErrServerClosed) {
120127
slog.Error("failed to start HTTPS server", "error", err)
128+
return fmt.Errorf("start HTTPS server: %w", err)
121129
}
122130
} else {
123-
if err := router.GetRouter().Run(":" + fmt.Sprint(config.Cfg.Server.Port)); err != nil {
131+
if err := router.GetRouter().Run(addr); err != nil {
124132
slog.Error("failed to start HTTP server", "error", err)
133+
return fmt.Errorf("start HTTP server: %w", err)
125134
}
126135
}
136+
return nil
127137
}

0 commit comments

Comments
 (0)