add graceful shutdown

This commit is contained in:
wjqserver 2025-03-25 08:20:08 +08:00
parent 5685240b41
commit 87b9f47abc

38
main.go
View file

@ -1,6 +1,7 @@
package main package main
import ( import (
"context"
"embed" "embed"
"flag" "flag"
"fmt" "fmt"
@ -8,6 +9,8 @@ import (
"io/fs" "io/fs"
"net/http" "net/http"
"os" "os"
"os/signal"
"syscall"
"time" "time"
"ghproxy/api" "ghproxy/api"
@ -334,10 +337,37 @@ func main() {
if showVersion || showHelp { if showVersion || showHelp {
return return
} }
err := router.Run(fmt.Sprintf("%s:%d", cfg.Server.Host, cfg.Server.Port))
if err != nil { server := &http.Server{
logError("Failed to start server: %v\n", err) Addr: fmt.Sprintf("%s:%d", cfg.Server.Host, cfg.Server.Port),
Handler: router,
} }
defer logger.Close()
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
/*
go func() {
err := router.Run(fmt.Sprintf("%s:%d", cfg.Server.Host, cfg.Server.Port))
if err != nil {
logError("Failed to start server: %v\n", err)
}
}()
*/
go func() {
if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
logError("Failed to start server: %v\n", err)
os.Exit(1)
}
}()
<-quit
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
if err := server.Shutdown(ctx); err != nil {
logError("Server forced to shutdown: %v\n", err)
}
defer cancel()
logger.Close()
fmt.Println("Program Exit") fmt.Println("Program Exit")
} }